pymysql: 2003, "无法连接到MySQL服务器 %r (%s)" % (self.host, e)

0 投票
1 回答
5230 浏览
提问于 2025-04-17 20:44

我正在使用Python 2.7.6,并通过“easy_install-2.7”安装了“pymysql”和“MySQL-python”这两个包。现在我想通过Python脚本连接到远程的MySQL服务器(客户端和MySQL服务器在同一个子网内)。

脚本如下:

cluster_inbound_ip="10.0.xx.xx"
conn = pymysql.connect(host=cluster_inbound_ip, port=cluster_port, user=db_root_user, passwd=db_root_pass, db = db_name)

编译脚本后出现错误

  File "/root/test_case.py", line 41, in setup_module
    conn = pymysql.connect(host=cluster_inbound_ip, port=cluster_port, user=db_root_user, passwd=db_root_pass, db = db_name)
  File "/usr/local/lib/python2.7/site-packages/PyMySQL-0.6.1-py2.7.egg/pymysql/__init__.py", line 88, in Connect
    return Connection(*args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/PyMySQL-0.6.1-py2.7.egg/pymysql/connections.py", line 634, in __init__
    self._connect()
  File "/usr/local/lib/python2.7/site-packages/PyMySQL-0.6.1-py2.7.egg/pymysql/connections.py", line 818, in _connect
    2003, "Can't connect to MySQL server on %r (%s)" % (self.host, e))
OperationalError: (2003, "Can't connect to MySQL server on '10.0.xx.xx' (%d format: a number is required, not str)")

我可以通过命令行ping通,并且能够连接到MySQL服务器。还有,我按照Olaf Erlandsen的建议,确认在iptables服务中添加了MySQL和HTTP端口,以解决类似的MySQLdb问题

有没有人能建议或者帮助解决这个问题?

1 个回答

3

我猜这个错误实际上是出现在这一行:

self.host_info = "socket %s:%d" % (self.host, self.port)

如果你把端口号作为字符串传入,而不是作为整数传入,那么你就会遇到这个问题。

举个例子:

>>> print "socket %s:%d" % ("localhost", 8000)
socket localhost:8000
>>> print "socket %s:%d" % ("localhost", '8000')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str

撰写回答