GatewayWorker+thinkphp5.1,操作数据库,使用TP的DB类,Mysql数据库默认连接是8小时。
在TP的命令行下的其他命令,配置断线重连,始终有效。
config('database.break_reconnect',true);
Db::Connect(config('database.'));
但在GatewayWorker中,大约每隔48小时,数据库就会连接失败:
[attach]1226[/attach]
GatewayWorker进程中,数据库初始化连接如下:
[attach]1227[/attach]
在重连1次失败后,再次重连就发生:“error: 2006 MySQL server has gone away”错误。
再次强制重连,依然无效:
[attach]1228[/attach]
暂时的解决办法就是stop停止GatewayWorker,再重新start -d启动GatewayWorker。
这样马上就能连接成功,数据立即能更新。
请walkor老大帮忙排查一下原因。快个把月了,采取了各种方法,都不行。
你可以尝试下用完数据库就关闭,用的时候再连
按照大牛walkor的方法,在GatewayWorker进程中,每次读写数据库都强制重新连接,已稳定运行5天,没有gone away了。不过总感觉这是偏方啊。幸亏在设计时GatewayWorker进程中很少操作数据库,否则可能极大的影响性能。
大神如果用您说的方式 , 执行mysql事务还会有作用吗?
也遇到过这个问题,已经解决
能请教下怎么解决的吗,我也遇到了
能请教下怎么解决的吗?
解决了吗
同问。
我特喵的直接手动断
找到项目目录thinkphp/library/think/db/Query.php加个方法
找到项目目录thinkphp/library/think/Db.php
顶部注释中加上 @method Query close() static 手动断线
然后需要的地方最后面用Db::close();