【数据库】mysql自动重连机制与soci库设置

一、mysql自动重连

mysql有两个默认连接时间,wait_timeout 和 interactive_timeout,默认是8小时,意味着如果客户端在8小时中没有操作数据库的话,服务器就会将此连接断开,此时再操作数据库,会报‘mysql server has gone away’类似的错误。
而项目中经常会遇到打开软件连上数据库服务器后等待任意时间不操作的情况。

  1. 可以通过修改mysql 服务器的wait_timeout 和 interactive_timeout时间,但最大值在windows下最多只能设置为24天左右;且过长时间连接会造成资源消耗。
  2. 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"即可。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值