flask-sqlalchemy连接mysql问题解决记录

使用flask-sqlalchemy连接mysql数据库做的项目,接口有时报错 (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during SQL....),查阅了很多资料,基本就是说mysql有一个自动断开时间,即 wait_timeout,超过这个时间的话,如果应用中的连接没有回收,那么再使用这个连接去查询数据库就会产生这个错误,参照百度的方法查阅并验证了一下,mysql的wait_timeout 参数默认时28800即8小时,而flask-sqlalchemy默认的连接池回收时间为2小时,后来查看了mcd上的数据库应用的设置,确实是8小时,那么应用的两小时回收应该小于wait_timeout,所以应该不是这个原因。

        后来查询了公司集群使用的数据库版本为 10.5.5-MariaDB-log,后边改为实验思路,连接数据库看连接的进程,发现数据库连接池的进程,在一定时间后会自动关闭,经过观察,这些进程处于sleep状态后600秒后就会自动关闭,此时再去调用接口查询数据库时就会报2013的错误,根据600这个值查询参数,最后查出了 innodb_fatal_semaphore_wait_threshold 这个参数,其值为600,所以mariaDB的连接断开时间实际应该是这个参数来控制的,为600s,后边解决就比较简单了,设置SQLALCHEMY_POOL_RECYCLE 的值小于600就可以了,目前设为了580,经测试,目前2013的问题没有再出现。

posted @ 2024-02-23 15:33  碧之疾风  阅读(270)  评论(0编辑  收藏  举报