mysql 超时断开_mysql会话超时连接断开

这两天遇到个问题, 程序A常驻内存,启动时候先连接mysql保存连接, 之后查询数据库就用该连接,

这样每次查询之前就不再去连接数据库了.可程序经常是启动后一两天就会报Lost connection to MySQL server during query.

查了一下资料怀疑可能是以下原因引起的,mysql默认会话超时时间为8个小时,而程序A查资料的时候是先在缓存redis查找,找不到再去mysql数据库查找.这样如果距最后一次查数据库8个小时内都没有发生查询,那么就会导致会话超时连接断开.解决方法如下:

1.修改会话超时时间

查看会话超时时间

mysql> show session variables where variable_name

='wait_timeout' or variable_name = 'interactive_timeout';

+---------------------+-------+

|

Variable_name | Value |

+---------------------+-------+

| interactive_timeout | 28800 |

|

wait_timeout | 28800 |

+---------------------+-------+

修改全局变量wait_timeout,

interactive_timeout,每个会话的这两个变量的默认值都是由全局变量值来初始化的

mysql> set global wait_timeout = 31536000;

mysql> set global interactive_timeout = 31536000;

这样超时时间就改为1年了,

不过这样修改当重起mysql数据库的时候这两个变量还是会给改为默认值28800,可以通过修改my.cnf文件,

在里面加上wait_timeout = 31536000和interactive_timeout =

31536000这两个配置,这样就可以永久修改了.

2.在代码里面连接的时候设置超时自动重连接

int mysql_options(MYSQL *mysql, enum

mysql_option option, const char *arg)

char value =1;

mysql_options(conn,

MYSQL_OPT_RECONNECT, &value);

5.0.19之前的版本必须在调用mysql_real_connect()之后再调用此函数,因为mysql_real_connect()会重置连接属性为默认值,后面的版本可以在mysql_init()之后mysql_real_connect()之前调用.不过在比较新的版本必须在每次执行SQL之前调用mysql_ping(),测试过在5.6.10的版本可以不用,5.6.15和5.6.20都需要.

关于这个问题总结可参考:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值