我在使用Python的MySQLdb库连接到我的本地MySQL数据库时遇到问题。该脚本以前运行良好,但我偶尔会在标题中得到MySQL错误。似乎没有解释何时发生错误,并且脚本始终从具有相同参数的同一台机器运行。
MySQL服务器使用端口3306(本地托管的phpMyAdmin工作)在Windows XP SP3上作为服务运行,并且脚本从Oracle VM VirtualBox中的Ubuntu 10.04客户机操作系统运行。
我目前正在解决这个问题,打开命令提示符并执行'net stop MySQL'然后'net start MySQL'。这允许我再次运行脚本几次,然后导致错误,我一直在通过重新启动MySQL服务来修复。
由于我仍在对脚本进行更改,因此有时脚本会引发异常并且不会正常退出,尽管我会捕获异常并关闭游标和连接。
连接数据库的代码:
def __init__(self):
try:
print "Connecting to the MySQL database..."
self.conn = MySQLdb.connect( host = "192.168.56.1",
user = "guestos",
passwd = "guestpw",
db = "testdb")
self.cursor = self.conn.cursor(MySQLdb.cursors.DictCursor)
print "MySQL Connection OK"
except MySQLdb.Error, e:
print "MySQLdb error %d: %s" % (e.args[0],e.args[1])
raise
发生这种情况时产生的完整错误如下:
MySQLdb error 2013: Lost connection to MySQL server at 'reading initial communication packet', system error: 0
Traceback (most recent call last):
File "search.py", line 45, in <module>
dataHandler = DataHandler()
File "/home/guestos_user/workspace/Search/src/data_handler.py", line 25, in __init__
db = "testdb")
File "/usr/lib/pymodules/python2.6/MySQLdb/__init__.py", line 81, in Connect
return Connection(*args, **kwargs)
File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 170, in __init__
super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (2013, "Lost connection to MySQL server at 'reading initial communication packet', system error: 0")
sudo vi /etc/mysql/my.cnf
删除
bind-address = 127.0.0.1
然后
sudo reboot now
而已。请注意,这会使您的mysql服务器在暴露时不那么安全。
这个Lost connection to MySQL server at 'reading initial communication packet', system error: 0 on a windows machine可能是您感兴趣的。不知道这是否会对你有所帮助,但是有些人能够通过使用服务器的名称而不是连接属性中的ip地址来解决它。
我已经看到,当子进程尝试共享相同的mysql连接ID时,会发生这种情况(解决方案=为每个子进程创建新连接)。我不确定在与多个线程共享连接对象时是否也可以这样做。
然而,这只是众多可能原因中的一个。有关故障排除资源的列表,请参阅MySQL Error 2013中的VVS答案。
你在MySQL服务器上有一个名为qazxsw poi的帐户吗?您必须有一个帐户才能从qazxsw poi访问您的MySQL服务器!
例如:您的IP地址是guestos@YOURIPADDRESS
;那么你必须创建和帐户,如果不存在,访问。
YOURIPADDRESS
只是通过重新启动我的mac来解决这个问题。虽然可能有更具体的解决方案。
你能改变bind-address = localhost并重启MySQL服务器吗?似乎这个问题与你的问题有关:192.168.56.2
这个 -
如果MySQL端口错误,则导致MySQL客户端错误2013“丢失连接...”。请注意,如果在SSH配置中禁用端口转发,则会发生此错误('sshd_config'文件中的配置参数'AllowTcpForwarding'设置为'no')。它(这里)简单地说明由于某种原因没有从SSH到MySQL的连接。但mySQL客户端API'认为'有一个连接,这就是为什么说“丢失连接......”而不是“无法连接......”。有一个成功的连接 - 但不是MySQL服务器 - 只有SSH守护进程!但MySQL客户端API并不是为了“看到”差异而设计的!
请参阅mysql> create user [email protected] identified by 'guestpw';
。
我运行一个Windows服务器,http://forums.mysql.com/read.php?152,355740,355742#msg-355742会不时加载并保留在Windows任务管理器的进程列表中。
如果你知道主机文件是正确的,那么杀死this进程并重新启动iis php-win.exe
如果您正在运行Windows,那么您的问题应该得到解决。
我有完全相同的mysql错误(错误2013(HY000):在'读取初始通信数据包'时失去与MySQL服务器的连接,系统错误:0 =)并通过向/etc/hosts.deny添加换行来解决它。
可能性:您的数据库已损坏。
当我在特定表的特定行上运行php-win.exe
语句时遇到了这种情况。 (具体来说,我正在编辑Django Admin站点中的项目。)大多数时候数据库工作得很好。
我终于通过运行解决了这个问题:
iisreset
之后一切都很好,没有连接丢失。
结论:
问题“UPDATE
”,有时是“OPTIMIZE TABLE `your_table`
”,如果数据库损坏,可以通过运行完整的数据库优化来解决。欲了解更多信息,Lost connection to MySQL server at 'reading initial communication packet'
。
尝试通过具有足够权限的用户远程连接到我的MySQL服务器时收到类似错误。
编辑/etc/mysql/my.cnf文件后包含
Can't connect to MySQL server on '127.0.0.1'
其中xx.xx.xxx.xxx是我的本地IP地址,我开始遇到与您完全相同的错误。从那里,我找到了一个关于这个问题的答案(由Coffee Converter回答)对我有用,可以在这里找到:read this
我为自己解决问题所做的就是编辑/etc/hosts.allow来包含
[mysqld]
bind-address=xx.xx.xxx.xxx
现在很棒!我希望这有帮助:)