mysql 总结

来源:互联网 发布:mac平时要关机吗 编辑:程序博客网 时间:2024/05/01 13:52

前言

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

问题

  • mysql 重连
    mysql 如果长时间误操作,默认8小时后会断开,通过修改配置文件可以延长时间。但是如果mysql在网络上,会因为网络状态不好而断开。
int value = 1;mysql_init(mysql); // initmysql_real_connect(...); // connectmysql_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 应该配合使用
0 0