设置自动重连
使用C++编程时,利用 MySQL的C语言接口编写程序,用 mysql_options 设置了自动重连:
mysql_init( &m_instance ); //mysql_close free mysql_init init object
char optval=1;
mysql_options(&m_instance,MYSQL_OPT_RECONNECT,&optval);
mysql_options(&m_instance, MYSQL_SET_CHARSET_NAME, "utf8");
if (mysql_real_connect(&m_instance, m_server.data(), m_username.data(),
m_password.data(), m_database.data(), m_port, 0, 0) ==NULL)
{
...
}
测试
使用程序连续发送sql请求服务器。
服务器是使用centos7.0系统安装MySQL8.0,执行
systemctl restart mysqld.service
错误
服务器重启后的sql请求都失败了,说明客户端的自动重连失败
原因
经过查找 MySQL的官方文档.
发现
mysql_options(&mysql, MYSQL_OPT_RECONNECT, &reconnect);
所设置的重连并不是连接断开就自动重连,而是在执行 mysql_ping() 的时候,如果连接断开了且自动重连设置为了true,则 mysql_ping() 会进行自动重连;若没有设置为自动重连,则 mysql_ping() 仅返回当前连接状态是否正常。
解决方案
在每次 mysql_query() 之前,先执行一次
if (mysql_ping(&mysql) != 0){
deal error...
}