专做宝宝的用品网站深圳小程序制作流程
测试MySQL server has gone away复现条件
- 环境
 - 情形一
 - 报错信息
 - 复现测试
 
- 情形二
 - 报错信息
 - 复现测试
 
环境
Python: 3.8/3.9
MySQL: 5.x
情形一
报错信息
  File "/usr/local/lib/python3.6/dist-packages/MySQLdb/cursors.py", line 319, in _querydb.query(q)File "/usr/local/lib/python3.6/dist-packages/MySQLdb/connections.py", line 259, in query_mysql.connection.query(self, query)
sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (2006, 'MySQL server has gone away')
 
复现测试
- 将MySQL中的wait_timeout调整为10s
 - 将flask sqlalchemy中数据库连接配置的SQLALCHEMY_POOL_RECYCLE改为大于wait_timeout值
 - 启动服务,在一个session中运行多个查询(总时间大于10s即可)
 
复现原因分析: 在程序中创建的一个连接,某次查询请求使用的此数据库连接时间超出了wait_timeout配置,但是未超过SQLALCHEMY_POOL_RECYCLE,导致此连接仍可被应用程序使用,但是已被MySQL主动断开。
情形二
报错信息
MariaDB [(none)]>  show processlist;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    15
Current database: *** NONE ***
 
复现测试
- mysql中修改interactive_timeout为很小的值,比如10s
 - 退出mysql交互模式,重新进入
 - 等待10s执行任意命令
 
复现原因分析: 交互模式中使用的连接,已被数据库断开(并未通知此连接),但查询请求仍尝试使用此连接。
