cursor.execute(sql)
File "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", line 173, in execute
self.errorhandler(self, exc, value)
File "/usr/lib64/python2.6/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.OperationalError: (2006, 'MySQL server has gone away')
我正在运行一个无限循环,但是每30-60分钟,我就会得到上面的错误。我想我想在每次循环迭代开始时添加一个条件来检查MySQL服务器连接是否仍然连接正常。如果它有gone away
,那么我想在继续下一次迭代之前建立一个新的连接和游标。
如何测试服务器是否在这里?这是正确的解决方案吗?
谢谢你!
您可以捕获操作错误异常并重新连接。
如果在运行查询之前明确希望检查连接是否已断开,则可以运行测试查询来检查是否发生异常。
我不确定在什么情况下会引发操作错误。但是如果您只想捕获
MySQL server has gone away
错误,那么可以这样做。它将只捕获“消失”错误,并允许由于其他原因引发操作错误异常。
更新
正如我在评论中所说,我的查询功能如下:
这只是一个例子,可能不适合你的情况。我想说的是,对于不同的事情有不同的功能会更好,这样你就可以轻松地处理这些情况。
无法将此添加为对安德鲁·约翰逊的评论,因此我将在此处回答。
Torndb并不总是重新连接。你经常会看到臭名昭著的“MySQL已经消失了……”错误。
处理这个问题的最好方法是为所有查询创建一个函数,并像其他人建议的那样使用它。另一种方法是将定时cookie分发给用户,如果有人用足够长的时间从您的网站请求某些内容,请通过一个具有以下内容的类:
这样您就可以重新连接数据库,但是对于有许多数据库的大型网站来说,这是不可扩展的。
您可以像shshank建议的那样捕捉错误,或者使用像torndb这样的库来自动重新连接。
相关问题 更多 >
编程相关推荐