mysql数据库响应超时怎么办

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql数据库响应超时怎么办相关的知识,希望对你有一定的参考价值。

参考技术A

MYSQL_OPT_READ_TIMEOUT 是 MySQL c api 客户端中用来设置读取超时时间的参数。在 MySQL 的官方文档中,该参数的描述是这样的:

    MYSQL_OPT_READ_TIMEOUT (argument type: unsigned int *)The timeout in seconds for each attempt to read from the server. There are retries if necessary, so the total effective timeout value is three times the option value. You can set the value so that a lost connection can be detected earlier than the TCP/IPClose_Wait_Timeout value of 10 minutes.

    也就是说在需要的时候,实际的超时时间会是设定值的 3 倍。但是实际测试后发现实际的超时时间和设置的超时时间一致。

    而具体什么时候发生三倍超时,在文档中没有找到。所以对 MySQL 5.7.20 的源码进行了一些分析。

    使用 GDB 调试代码找了实际与 mysql server 通信的代码,如下:

    请点击输入图片描述

    其中 vio_read() 函数中,使用 recv 和 poll 来读取报文和做读取超时。net_should_retry() 函数只有在发生 EINTR 时才会返回 true。从这段代码来看是符合测试结果的,并没有对读取进行三次重试。只有在读取操作被系统中断打断时才会重试,但是这个重试并没有次数限制。

    从上面代码的分析可以看出,代码的逻辑和文档的描述不符。于是在一顿搜索后,找到了一个 MySQL 的 BUG(Bug #31163)。该 BUG 报告了在 MySQL 5.0 中,MySQL c api 读取的实际超时时间是设置的三倍,与现有文档描述相符。于是对 MySQL 5.0.96 的代码又进行分析。

    同样使用 GDB 找到了通信部分的代码。这次找到了重试三次的代码,如下:

    请点击输入图片描述

    这个版本的 MySQL api 的读写超时是直接使用的 setsockopt 设置的。第一次循环,在 A 点发生了第一次超时(虽然注释写的非阻塞,但是客户端的连接始终是阻塞模式的)。然后在 B 点将该 socket 设置为阻塞模式,C 点这里重置 retry 次数。由于设置了 alarm 第二次以后的循环会直接进入 D 点的这个分支,并且判断循环次数。作为客户端时net->retry_count 始终是 1,所以重试了两次,共计进行了 3 次 vioread 后从 E 点退出函数。

    由上面的分析可知,MySQL 文档对于该参数的描述已经过时,现在的 MYSQL_OPT_READ_TIMEOUT 并不会出现三倍超时的问题。而 Bug #31163 中的处理结果也是将文档中该参数的描述更新为实际读取超时时间是设定时间的三倍。也许是 MySQL 的维护者们在后续版本更新时忘记更新文档吧。

参考技术B interactive_timeout:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。又见wait_timeout
wait_timeout:服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义),又见interactive_timeout本回答被提问者采纳

LRF-解决MySQL安装到start servic出现安装未响应或超时未安装成功

遇到这种情况一般都是以前安装过MySQL卸载后重新安装到最后一步配置出现问题:配置到start servic出现未响应或者超时未安装成功。

  • 主要原因是MySQL部分配置文件并未完全清理。

方法一:清除MySQL残余文件

以下是清理MySQL残余文件步骤:

1 在控制面板-程序与功能中将以下两个MySQL软件卸载

2 将C:\\ProgramData下的MySQL文件夹删除

C:\\ProgramData一般处于隐藏状态,需要点击查看,将隐藏的项目勾上才可以看的到

3 删除MySQL在注册表中的信息:搜索注册表在以下路径找到MySQL目录删除

计算机\\HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Services\\EventLog\\Application\\MySQL

4 搜索服务,进入服务界面,找到MySQL服务, 以管理员身份运行命令提示符,根据自己的MySQL服务输入以下代码,博主这里为MySQL80。所以输入

  sc delete MySQL80

成功会返回一个:

  Delete service SUCCESS

完成以上步骤后重启电脑,进行MySQL的安装。

方法二:重置电脑(大招)

所谓大招是实在没办法了才使用的
注意:此方法重置电脑后所有配置的环境变量都需要重新配置:如jdk,git等,请三思!!!

设置–>更新与安全–>恢复–>重置此电脑

希望本文章能帮助到你,祝你MySQL配置成功!

以上是关于mysql数据库响应超时怎么办的主要内容,如果未能解决你的问题,请参考以下文章

mysql长时间不操作会不会连接超时?怎么改?

C#连接mysql数据库,怎么设置超时时间

mysql怎么设置超时时间

MySQL连接超时自动断开连接应该怎样处理

普歌-解决MySQL安装到start servic出现安装未响应或超时未安装成功

LRF-解决MySQL安装到start servic出现安装未响应或超时未安装成功