mysql怎么设置超时时间

也就是说在需要的时候,实际的超时时间会是设定值的 3 倍。但是实际测试后发现实际的超时时间和设置的超时时间一致。而具体什么时候发生三倍超时,在文档中没有找到。所以对 MySQL 5.7.20 的源码进行了一些分析。使用 GDB 调试代码找了实际与 mysql server 通信的代码,如下:请点击输入图片描述 其中...
mysql怎么设置超时时间
mysql命令
查看mysql server超时时间:

msyql> show global variables like '%timeout%';

设置mysql server超时时间(以秒为单位):

msyql> set global wait_timeout=10;

msyql> set global interactive_timeout=10;
my.cnf默认都是没有的,但其实你装的时候会在/usr/share/mysql 这个路径下有类似的,根据你数据库大小不同的推荐配置,有my-small.cnf,my-large.cnf等等,如果需要配置文件,选择一个拷到/etc下,重命名为my.cnf即可,默认超时时间等都在这里进行配置,这样启动会就会是你设置的默认值了

如果你在命令行里改,只会修改当前会话,退出重进或者重启mysql之后就会变回默认值.2017-07-23
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 的维护者们在后续版本更新时忘记更新文档吧。
2020-12-15
mengvlog 阅读 34 次 更新于 2025-09-10 06:58:58 我来答关注问题0
  • 一、用法 通过C API设置超时:连接超时:使用MYSQL_OPT_CONNECT_TIMEOUT选项,通过mysql_options函数设置连接超时时间,单位为秒。读超时:使用MYSQL_OPT_READ_TIMEOUT选项,设置读取操作的超时时间。写超时:使用MYSQL_OPT_WRITE_TIMEOUT选项,设置写入操作的超时时间。通过配置文件设置超时:连接超时:在MySQ...

  •  阿暄生活 mysql-connector-java:8.0.23与mysql-connector-j:8.4.0连接超时时间

    MySQL服务器配置:wait_timeout:定义了非交互式连接在关闭前可以保持空闲的最长时间。interactive_timeout:定义了交互式连接在关闭前可以保持空闲的最长时间。应用程序连接池配置:大多数连接池(如HikariCP、C3P0等)都提供了配置选项来设置连接获取超时、验证超时等。这些配置决定了连接池在尝试获取新连接或...

  •  翡希信息咨询 MySQL Workbench出现:Error Code 2013.的解决方案

    具体操作:在MySQL Workbench中,进入Preferences设置,找到SQL Editor相关的超时时间设置,将其从默认值调整为更长的时间,如600秒或更长,根据实际情况可能需要设置到10000秒或更长。考虑数据量和查询复杂度:数据量影响:对于大数据量的查询,超时时间可能需要根据实际情况适当增加,以避免频繁的断开连接。查...

  • 通过show global variables like '%timeout';查看MySQL的连接超时设置。修改my.ini中的wait_timeout和interactive_timeout变量,增加连接超时时间。例如,设置wait_timeout=2880000和interactive_timeout=2880000。增加max_allowed_packet参数值:使用show global variables like 'max_allowed_packet';查看当前ma...

  •  HB91016 keepalived下,mysql连接超时

    第一种途径使用命令行在mysql提示符下>setglobalwait_timeout=1814400这种方式是一种临时方法,重启服务就会返回默认值了。第二种途径修改my.ini配置文件[mysqld]wait_timeout=31536000interactive_timeout=31536000在mysqld下面添加以上两行,后面的数字是时间首先服务中找到mysql,然后右键属性,在可执行文件...

檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部