MySQL错误:2013年,“在'读取初始通信数据包'时失去与MySQL服务器的连接',系统错误:0”

时间:2010-08-26 18:14:09

标签: python mysql

我在使用Python的MySQLdb库连接到我的本地MySQL数据库时遇到问题。该脚本以前运行良好,但我偶尔会在标题中得到MySQL错误。似乎没有解释何时发生错误,并且脚本始终从具有相同参数的同一台机器运行。

MySQL服务器在Windows XP SP3上使用端口3306(本地托管的phpMyAdmin工作)作为服务运行,脚本从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")

12 个答案:

答案 0 :(得分:18)

sudo vi /etc/mysql/my.cnf

删除

bind-address = 127.0.0.1

然后

sudo reboot now

就是这样。请注意,这会使您的mysql服务器在暴露时不那么安全。

答案 1 :(得分:4)

我已经看到,当子进程尝试共享相同的mysql连接ID时,会发生这种情况(解决方案=为每个子进程创建新连接)。我不确定在与多个线程共享连接对象时是否也可以这样做。

然而,这只是众多可能原因中的一个。有关故障排除资源的列表,请参阅MySQL Error 2013中的VVS答案。

答案 2 :(得分:2)

您的MySQL服务器中是否有一个名为guestos@YOURIPADDRESS的帐户? 您必须拥有一个帐户才能从YOURIPADDRESS访问您的MySQL服务器!

例如: 您的IP地址为192.168.56.2;那么你必须创建和帐户(如果不存在)才能访问。

mysql> create user guestos@192.168.56.2 identified by 'guestpw';

答案 3 :(得分:1)

仅通过重新启动我的mac就解决了这个问题。虽然可能有更具体的解决方法。

答案 4 :(得分:0)

我运行一个Windows服务器,php-win.exe会不时加载并保留在Windows任务管理器的进程列表中。

如果您知道主机文件是正确的,请终止php-win.exe进程并重新启动iis iisreset

如果您正在运行Windows,则应解决您的问题。

答案 5 :(得分:0)

你能改变bind-address = localhost并重启MySQL服务器吗?似乎此问题与您的问题有关:http://forums.mysql.com/read.php?152,355740,355742#msg-355742

也是这个 -

  

如果MySQL端口错误导致MySQL客户端错误2013“丢失   连接...“。请注意,如果端口转发,也会发生此错误   在SSH配置中禁用(配置参数   'sshd_config'文件中的'AllowTcpForwarding'设置为'no'。它   (这里)只是告诉我没有从SSH到MySQL的连接   某些原因。但mySQL客户端API'认为'有一个   连接,这就是为什么说'丢失连接......'而不是   '无法连接......'。有一个成功的联系 - 但不是   MySQL服务器 - 仅限SSH守护进程!但MySQL客户端API是   不是为了“看到”差异而设计的!

参考this

答案 6 :(得分:0)

我有完全相同的mysql错误(ERROR 2013(HY000):在'读取初始通信数据包'时失去与MySQL服务器的连接,系统错误:0 =)并通过向/ etc /添加换行来解决它hosts.deny中。

答案 7 :(得分:0)

可能性:您的数据库已损坏

当我在特定表的特定行上运行UPDATE语句时遇到了这种情况。 (具体来说,我正在编辑Django Admin站点中的项目。)大多数情况下数据库工作正常。

我终于通过运行来解决了这个问题:

OPTIMIZE TABLE `your_table`

之后一切都很好,没有连接丢失。

<强>结论:

问题&#34; Lost connection to MySQL server at 'reading initial communication packet'&#34;,有时&#34; Can't connect to MySQL server on '127.0.0.1'&#34;,如果数据库已损坏,可以通过运行完整数据库优化来解决。有关详细信息,请read this

答案 8 :(得分:0)

尝试通过具有足够权限的用户远程连接到MySQL服务器时收到类似错误。

编辑/etc/mysql/my.cnf文件后包含

[mysqld]
bind-address=xx.xx.xxx.xxx

其中xx.xx.xxx.xxx是我的本地IP地址,我开始遇到与您完全相同的错误。从那里,我找到了一个关于这个问题的答案(咖啡转换器回答)对我有用,可以在这里找到:Lost connection to MySQL server at 'reading initial communication packet', system error: 0 on a windows machine

我为自己解决问题所做的就是编辑/etc/hosts.allow以包含

mysqld: ALL: allow

现在很棒!我希望这有助于:)

答案 9 :(得分:0)

只是进一步扩展可能的原因列表:它也可能像错误的连接数据/凭据一样平庸。我在与sqlalchemy结合使用时遇到了此错误:

sqlalchemy.exc.OperationalError: (mysql.connector.errors.OperationalError) 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

在我的代码中,我连接到多个不同的数据库,偶尔我没有得到数据库连接及其凭据(例如服务器的IP地址,数据库名称,密码等)之间的映射。 ,然后还会导致2013错误(在这种情况下,该错误包装为sqlalchemy操作错误)。

答案 10 :(得分:0)

setting.py文件设置如下:

'ENGINE':'django.db.backends.mysql', 'NAME':'test2', 'USER':'root', 'PASSWORD':'', 'HOST':'localhost', 'PORT':'3308',

答案 11 :(得分:-1)

bug report可能对您有用。不知道这是否会对您有所帮助,但有些人能够通过使用服务器的名称而不是连接属性中的 ip address 来解决它。