首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询过程中失去与MySQL服务器的连接

问查询过程中失去与MySQL服务器的连接
EN

Stack Overflow用户
提问于 2009-12-11 07:29:47
回答 20查看 168.6K关注 0票数 67

我有一个很大的表,需要处理其中的所有行。我总是收到丢失连接的消息,并且我无法重新连接并将光标恢复到上次的位置。这基本上就是我这里的代码:

代码语言:javascript
复制
#
import MySQLdb

class DB:
  conn = None

  def connect(self):
    self.conn = MySQLdb.connect('hostname', 'user', '*****', 'some_table', cursorclass=MySQLdb.cursors.SSCursor)

  def query(self, sql):
    try:
     cursor = self.conn.cursor()
     cursor.execute(sql)
   except (AttributeError, MySQLdb.OperationalError):
     self.connect()
     cursor = self.conn.cursor()
     cursor.execute(sql)
   return cursor
#

#
db = DB()
sql = "SELECT bla FROM foo"
data = db.query(sql)

for row in data:
    do_something(row)
#

但我总是得到这样的结论:

代码语言:javascript
复制
#
Traceback (most recent call last):
  File "teste.py", line 124, in <module>
   run()
 File "teste.py", line 109, in run
   for row in data:
 File "/usr/lib64/python2.5/site-packages/MySQLdb/cursors.py", line 417, in next
   row = self.fetchone()
 File "/usr/lib64/python2.5/site-packages/MySQLdb/cursors.py", line 388, in fetchone
   r = self._fetch_row(1)
 File "/usr/lib64/python2.5/site-packages/MySQLdb/cursors.py", line 285, in _fetch_row
   return self._result.fetch_row(size, self._fetch_type)
   _mysql_exceptions.OperationalError: (2013, 'Lost connection to MySQL server during query')
    Exception _mysql_exceptions.OperationalError: (2013, 'Lost connection to MySQL server during query') in <bound method SSCursor.__del__ of <MySQLdb.cursors.SSCursor object at 0x7f7e3c8da410>> ignored
#

你有什么想法吗?

EN

回答 20

Stack Overflow用户

发布于 2009-12-11 07:42:00

mysql文档中有一整页专门介绍这个错误:http://dev.mysql.com/doc/refman/5.0/en/gone-away.html

值得注意的是

  • 如果向服务器发送的查询不正确或太大,也会出现这些错误。如果mysqld接收到过大或无序的数据包,它会假定客户端出了问题,并关闭连接。如果您需要大型查询(例如,如果您正在处理大型BLOB列),则可以通过设置服务器的max_allowed_packet变量来增加查询限制,该变量的默认值为1MB。您可能还需要增加客户端的最大数据包大小。关于设置数据包大小的更多信息,请参见B.5.2.10“数据包太大”部分。

警告您可以通过使用--

  • -warnings=2选项启动mysqld来获取有关丢失连接的更多信息。这会在hostname.err文件

中记录一些断开连接的错误

票数 46
EN

Stack Overflow用户

发布于 2013-05-09 12:16:54

扩大mysql服务器的max_allowed_packet有三种方式:

  1. 在mysql服务器上更改文件max_allowed_packet=64M中的/etc/mysql/my.cnf并重启服务器
  2. 在mysql服务器上执行sql :连接到mysql后执行sql:

代码语言:javascript
复制
connection.execute('set max_allowed_packet=67108864')
票数 32
EN

Stack Overflow用户

发布于 2013-08-12 15:11:43

对于派生子进程的应用程序,您也可能会遇到此错误,所有这些应用程序都尝试使用与MySQL服务器的相同连接。这可以通过对每个子进程使用单独的连接来避免。

叉子可能会撞到你。不过,在这种情况下可不要这样做。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1884859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档