使用Python通过SSH连接到MySQL数据库

2024-09-28 21:26:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试过其他问题的解决方法,但没有一个对我有效。我试图通过设置ssh隧道从运行在远程服务器上的mysql数据库中提取数据。我的代码如下:

server = sshtunnel.SSHTunnelForwarder(
            ('10.6.41.10', 22),
            ssh_username= 'serveruser',
            ssh_password= 'serverpw',
            remote_bind_address=('127.0.0.1', 3306))

server.start()
print(server.local_bind_port)

cnx = mysql.connector.connect(user='root', password='mysqlpw',
                              host='127.0.0.1',
                              database='mydb',
                              charset='utf8',
                              use_unicode='FALSE',
                              port = 3306)

但是,当我运行此代码时,我收到:

^{pr2}$

我也试着增加

local_bind_address = ('0.0.0.0', 3306)

到sshtunnel设置程序,而不是接收

Problem setting SSH Forwarder up: Couldn't open tunnel 0.0.0.0:3306 <> 127.0.0.1:3306 might be in use or destination not reachable

我不完全理解远程绑定地址和本地绑定地址,所以我猜这肯定是有问题。我知道我的用户名/pw/server信息是正确的,我可以通过终端ssh进入我的服务器,然后使用

mysql -h 127.0.0.1 -u root -p

成功登录mysql服务器。那么我需要做些什么来让它在python中运行呢?谢谢。在


Tags: 代码服务器远程serverbinduseportaddress
1条回答
网友
1楼 · 发布于 2024-09-28 21:26:25

如果不在sshtunnel.SSHTunnelForwarder中指定local_bind_address,则本地端口将随机分配。在这种情况下,在mysql.connector.connect()中设置port=server.local_bind_port。在

相反,您也可以在sshtunnel.SSHTunnelForwarder中设置local_bind_address=('0.0.0.0', [some port which is not in use])sshtunnel.HandlerSSHTunnelForwarderError(“问题设置…”)告诉您不能使用local_bind_address=('0.0.0.0', 3306)。在

相关问题 更多 >