gpt4 book ai didi

python - 从python连接到远程服务器中的MySQL

转载 作者:行者123 更新时间:2023-11-29 02:14:16 29 4
gpt4 key购买 nike

我在 MacOS X 10.12 上使用 Python 3.5、pymysql 0.7.6。

我正在尝试使用 python 访问远程服务器中的 MySQL 数据库。我可以使用以下命令从命令行访问:

ssh root@XXX.XXX.XXX.XXX
root@XXX.XXX.XXX.XXX's password: my_server_password

然后在服务器中:

mysql my_database -p
Enter password: my_database_password

它有效,我可以用我的数据库做各种事情。现在,我尝试在 python 中做同样的事情,遵循文档或我在其他帖子中找到的大量示例:

import pymysql

cnx = pymysql.connect(host='XXX.XXX.XXX.XXX', port='3306', user='root', password='my_server_password', db='my_database')

它不起作用,出现错误:

pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'XXX.XXX.XXX.XXX' ([Errno 61] Connection refused)")

凭据是正确的凭据,我已经检查端口是否正确,正如其他帖子中所建议的那样。我怀疑这可能与也有密码的数据库有关,而不仅仅是服务器,但我还没有找到包含这两个密码的任何方法。事实上,我不确定连接命令中应该包含哪个密码,是服务器密码还是数据库密码。它不适用于他们两个。

那么,对于这里可能存在的问题或者我是否遗漏了重要的一点,您有什么建议吗?

最佳答案

当您运行 mysql 命令时,您是在 SSH shell 中执行此操作。也就是说,您正在通过 localhost 连接连接到远程计算机上运行的服务器。该远程服务器似乎没有设置为允许远程连接到它,只允许来自机器本身的连接。

你需要让你的 python 脚本像你一样通过 SSH 连接到 MySQL 服务器。您可以打开 SSH 隧道到远程服务器上的端口 3306。

我喜欢为此目的使用的模块是:https://pypi.python.org/pypi/sshtunnel

from sshtunnel import SSHTunnelForwarder
import pymysql

server = SSHTunnelForwarder(
'XXX.XXX.XXX.XXX',
ssh_username='root',
ssh_password='my_server_password',
remote_bind_address=('127.0.0.1', 3306)
)
server.start()

cnx = pymysql.connect(
host='127.0.0.1',
port=server.local_bind_port,
user='root',
password='my_database_password',
db='my_database'
)

# Make sure to call server.stop() when you want to disconnect
# after calling cnx.close()

关于python - 从python连接到远程服务器中的MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42726681/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com