pymysql: 2003, "无法连接到MySQL服务器 %r (%s)" % (self.host, e)
我正在使用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