您的位置:首页 > 数据库 > SQL

关于" MySQL server has gone away"的问题

2015-04-07 16:26 369 查看
写了一个python程序,采用阻塞方式获取redis队列信息,这个队列信息可能好几天才会有新的队列信息put到队列中。在获取到队列信息后,会将获取到的队列信息通过MySQLdb模块写入MySQL数据库中。如果长时间没有队列中没有信息的话,比如1天以上,在1天之后,有队列信息抵达redis队列,并将新的队列get出来,接着写入MySQL数据库时,会报“ MySQL server has gone away”,开始还以为是MySQL有问题,后来发现原来不是。一般这种情况,有的是通过设置“wait_timeout”,将wait_timeout值设置很大,wait_timeout 默认是10.但是我们线上的MySQL的wait_timeout设置为86400,已经是很大了。在stackoverflow.com 上看到一个解析办法,示例代码如下:
import MySQLdbclass DB:
conn = None

def connect(self):
self.conn = MySQLdb.connect()

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 * FROM foo"cur = db.query(sql)# wait a long time for the Mysql connection to timeoutcur = db.query(sql)# still works
大概的意思就是在异常之后,再执行一次select操作,这或许也是一个办法吧。
我在代码的也加入了一段类似的功能,在执行真正的SQL操作前,先执行一个SELECT 语句,然后再执行真正的SQL操作。

本文出自 “简单就是美的博客” 博客,转载请与作者联系!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: