背景
在测试站上并没有问题,放到线上就会报错。如下:
(2013, 'Lost connection to MySQL server during query ([WinError 10053] 您的主机中的软件中止了一个已建立的连接。)')
分析
分析了一下主要会有以下三个方面的原因
- mysql服务器宕机了
- 执行的sql过长被杀死了
- 服务器连接超时了
解决
根据以上分析原因依次确认,mysql还可以打开并执行
排除了第一种,哈哈
测试了线上需要执行的时间很快,排除第二种
所以嘛,也就是第三种。连接超时了。
两种解法方案哈
1.修改等待时间wait_timeout,可以使用如下命令修改
mysql> show global variables like '%timeout%'; 找到需要配置的参数
mysql> set global interactive_timeout=60*60*24; 设置超时时间
mysql> set global wait_timeout=60*60*24; 设置超时时间
简单说一下两种超时的区别吧,interactive_timeout是交互式连接,wait_timeout是非交互式连接,交互式就是打开一个客户端进行操作,而非交互式就是我们new Db,然后cursor操作这样。
2.第二种就是使用后台语言判断是否连接超时,进行重联。上代码
sql = "select * from users where user_id = 100"
db.connect(reconnect=True)
res = cursor.execute(sql)