MySQL server has gone away原因分析&解决方案
环境
Python: 3.8/3.9
MySQL: 5.x
情形一
Python sqlalchemy连接池配置中的连接回收时间 SQLALCHEMY_POOL_RECYCLE 大于MySQL配置中的 wait_timeout。
解决方案
- 修改MySQL配置中的 wait_timeout
- 修改Python数据库连接池中的连接回收时间,如SQLALCHEMY_POOL_RECYCLE
查看MySQL配置
sql
show global variables like '%wait_timeout';
更改MySQL配置
注意:
- 单位是秒(s)
- 默认是28800(即8小时)
- 使用global方式更改全局变量,对于已创建的连接会话不生效(比如当前交互的会话)
sql
set global wait_timeout=28800;
或者:修改MySQL配置,重启MySQL服务(在mysqld下添加/修改)
[mysqld]
wait_timeout = 28800
情形二
数据库连接发送的包数据太大,超过了数据库 max_allowed_packet 配置
查看MySQL配置
sql
show global variables like '%max_allowed_packet';
更改MySQL配置
注意:
- 单位是字节(Byte)
- 默认是4194304(即4MB)
sql
# 调整为16MB
set global max_allowed_packet=16*1024*1024;
或者:修改MySQL配置,重启MySQL服务(在mysqld下添加/修改)
[mysqld]
max_allowed_packet = 256M
|------------------------------------|
| 欢 迎 客 官 在 评 论 区 分 享 您 的 解 决 方 案 ~ |