Python SQLAlchemy/MySQL在查询过程中与MySQL服务器失去连接
SQLAlchemy(0.9.8)和mysql-5.6.21-osx10.8-x86_64以及MAC OS X 10.3.3(约塞米蒂) 我时断时续地说:Python SQLAlchemy/MySQL在查询过程中与MySQL服务器失去连接,python,mysql,macos,sqlalchemy,Python,Mysql,Macos,Sqlalchemy,SQLAlchemy(0.9.8)和mysql-5.6.21-osx10.8-x86_64以及MAC OS X 10.3.3(约塞米蒂) 我时断时续地说: InterfaceError: (InterfaceError) 2013: Lost connection to MySQL server during query u'SELECT..... ' 我已经阅读了一些线程,大多数情况下都是通过将其添加到my.cnf来解决的 max_allowed_packet = 1024M 这应该
InterfaceError: (InterfaceError) 2013: Lost connection to MySQL server during query u'SELECT..... '
我已经阅读了一些线程,大多数情况下都是通过将其添加到my.cnf来解决的
max_allowed_packet = 1024M
这应该足够我做的事了。做完这件事后,我间歇性地踩了一下。并将该行放入/etc/my.cnf:
log-error = "/Users/<myname>/tmp/mysql.err.log"
log-warnings = 3
我已经到了一个地步,我认为更多的细节和更好的日志记录可能会有所帮助,或者在这之前我还可以尝试其他方法
谢谢。看起来你的MySQL连接在长时间不活动后超时了,我打赌如果你一直使用现有设置查询数据库,这种情况不会发生。MySQL和sql双方都有一些设置可以解决这个问题:
pool\u recycle
值,尝试不同的/较小的值,例如1800(秒)。如果要从文件中读取DB设置,请将其设置为
回收池:1800from sqlalchemy import create_engine
e = create_engine("mysql://user:pass@localhost/db", pool_recycle=1800)
wait\u timeout
MySQL变量,查看服务器在关闭非交互连接之前等待活动的秒数。e、 g
显示全局变量,如“等待超时”db
是flask\u sqlalchemy.sqlalchemy
的一个实例,但是sqlalchemy会话的概念也将保持不变
def manage_session(f):
def inner(*args, **kwargs):
# MANUAL PRE PING
try:
db.session.execute("SELECT 1;")
db.session.commit()
except:
db.session.rollback()
finally:
db.session.close()
# SESSION COMMIT, ROLLBACK, CLOSE
try:
res = f(*args, **kwargs)
db.session.commit()
return res
except Exception as e:
db.session.rollback()
raise e
# OR return traceback.format_exc()
finally:
db.session.close()
return inner
我还在Flask SQLAlchemy配置中添加了50秒的pool_循环,但这对解决方案没有明显的帮助
编辑1:
下面是在最终代码中如何使用它的示例片段:
from flask_restful import Resource
class DataAPI(Resource):
@manage_session
def get(self):
# Get data rows from DB
我不认为我的案子应该暂停。我在对数据库的连续请求中遇到了这个错误,因此我的代码不断地查询数据库。我怀疑这是由于“缓冲区”相关的问题,因为我的“累积”结果集字节大小可能相当大,尽管单个请求结果集可能不一定很大。我也遇到了同样的问题,我在第10分钟每小时运行一个cronjob。为此,我正在进行连接,但每10小时它就会显示2013年的连接丢失错误。有什么建议吗?这个解决方案对我从来都不起作用。我已经设置了pool_recycle和pool_pre_ping,但它从未解决过这个问题。你怎么称呼它?@RyanH-添加了一个示例作为对答案的编辑。
from flask_restful import Resource
class DataAPI(Resource):
@manage_session
def get(self):
# Get data rows from DB