This topic created in 4920 days ago, the information mentioned may be changed or developed.
"/home/envs/local/lib/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler raise errorclass, errorvalue
sqlalchemy.exc.OperationalError: (OperationalError) (2006, 'MySQL server has gone away')
python,flask,SqlAlchemy
网站刚刚拉起来的时候运行正常,但是过1,2个小时以后就报503错误。差了下日志如上。
百度and谷歌了一下,
都是推荐修改
wait_timeout=2880000
interactive_timeout = 2880000
但是这两个值如果没设置的话,默认就是8小时吧?
max_allowed_packet = 10M这个貌似就更没必要修改了吧?因为一开始是正常的。过1,2个小时才有问题。
请问要怎么弄呀。。
5 replies 1970-01-01 08:00:00 +08:00  | | 1 Livid Nov 22, 2012 1 出错时就让程序重连一下 MySQL 服务器。 |
 | | 2 neildd Nov 22, 2012 是不是在多线程里调用了MySQLdb,多线程里会出这种问题。 |
 | | 3 neildd Nov 22, 2012 import MySQLdb
class MyDBClass: def __init__(self, db_host, db_user, db_pass, db_name, db_charset='UTF8'): self.db_host = db_host self.db_user = db_user self.db_pass = db_pass self.db_name = db_name self.db_charset = db_charset self.db = None def db_connect(self): self.db = MySQLdb.connect(host=self.db_host, user=self.db_user, passwd=self.db_pass, db=self.db_name, charset=self.db_charset) self.cursor = self.db.cursor() def db_ping(self): if not self.db: self.db_connect() else: try: self.db.ping() except: self.db_connect() def db_fetchone(self, *args): self.db_ping() self.cursor.execute(*args) ret = self.cursor.fetchone() return ret def db_fetchall(self, *args): self.db_ping() self.cursor.execute(*args) ret = self.cursor.fetchall() return ret def db_execute(self, *args): self.db_ping() self.cursor.execute(*args) return self.db.insert_id() |
 | | 4 codenamea Nov 22, 2012 1 app.config["SQLALCHEMY_POOL_RECYCLE"] = XXX 这个值比mysql里设置的略小一点。这样每次在mysql连接超时之前,sqlalchemy就会自动回收。 另外2个小时就掉了,感觉不是8小时的超时。你可以自己输出以下mysql的配置看一下。 : show variables like '%timeout'; |