mysql 总结

前言

在项目中遇到一点小问题,所以总结下来。以供以后查阅。如果大家也遇到过这种问题,就可以节省时间了。前期总结会比较少,随着项目的推进,我会在以后补充。如果有什么不正确的地方,欢迎大家帮我补充。

问题

  • mysql 重连
    mysql 如果长时间误操作,默认8小时后会断开,通过修改配置文件可以延长时间。但是如果mysql在网络上,会因为网络状态不好而断开。
int value = 1;
mysql_init(mysql); // init
mysql_real_connect(...); // connect
mysql_options(mysql, MYSQL_OPT_RECONNECT, &value); // *设置mysql自动重连,词语应该放在"init""connect"之后。*

网上说,在mysql_real_connect()函数里默认是关闭自动重连的。设置了之后,使用mysql_ping(mysql);就可以检验网络是否畅通,在网络断开时,也可以自动重连

  • mysql重连阻塞问题
    我每次使用mysql语句是,都用mysql_ping()函数来判断网络是否畅通。结果发现在网络不好时,mysql_ping()这个函数竟然阻塞了16分钟,这个不可容忍的。
int value = 1;
int ReadTimeout = 1;
int WriteTimeout = 2;

mysql_init(mysql); // init

// 放在 init 和 connect 中间
mysql_options(mysql, MYSQL_OPT_CONNECT_TIMEOUT, &value);
mysql_options(mysql, MYSQL_OPT_READ_TIMEOUT, &ReadTimeout);
mysql_options(mysql, MYSQL_OPT_WRITE_TIMEOUT, &WriteTimeout);

mysql_real_connect(...); // connect
  • 现象
    • 经过本人不断测试,MYSQL_OPT_CONNECT_TIMEOUT,MYSQL_OPT_READ_TIMEOUT都设置,网络端口情况下,mysql_ping()阻塞时间为MYSQL_OPT_READ_TIMEOUT的3倍,即3s,以后为1s
    • 如果只设置MYSQL_OPT_READ_TIMEOUT,在网络端口下情况,那么mysql_ping()第一次阻塞时间为MYSQL_OPT_READ_TIMEOUT的3倍(3s),第二次时间不定,以后还是MYSQL_OPT_READ_TIMEOUT的3倍
    • 所以MYSQL_OPT_CONNECT_TIMEOUT 和MYSQL_OPT_READ_TIMEOUT 应该配合使用

你可能感兴趣的:(mysql,mysql)