一、mysql自动重连
mysql有两个默认连接时间,wait_timeout 和 interactive_timeout,默认是8小时,意味着如果客户端在8小时中没有操作数据库的话,服务器就会将此连接断开,此时再操作数据库,会报‘mysql server has gone away’类似的错误。
而项目中经常会遇到打开软件连上数据库服务器后等待任意时间不操作的情况。
- 可以通过修改mysql 服务器的wait_timeout 和 interactive_timeout时间,但最大值在windows下最多只能设置为24天左右;且过长时间连接会造成资源消耗。
- mysql其实提供了一个自动重连的选项:
mysql_options(&mysql, MYSQL_OPT_RECONNECT, &reconnect);
如果 MySQL 客户端库在尝试向服务器发送要执行的语句时发现连接已断开,则它可以执行与服务器的自动重新连接。如果启用了自动重新连接,库会尝试一次重新连接到服务器并再次发送语句。
也就是说,打开自动重连选项后,再调用mysql_ping() 或者mysql_query()相关函数,mysql会检测是否是连接状态,如果已经断开,会自动尝试重新连接,省去了我们自己做心跳设置或者长连接设置。
二、SOCI库设置自动重连
那么在c++的数据库操作库中soci中如果设置自动重连呢?其实很简单。
可以看到在session中的mysql连接函数中,如果传入reconnect_p参数,就会调用mysql_options()进行设置。也就是说,只要在传入的参数connection_parameters const & parameters
中包含”reconnect = 1"
即可。