上云无忧 > 文档中心 > 百度智能云云数据库RDS MySQL之interactive_timeout和wait_timeout
云数据库 RDS
百度智能云云数据库RDS MySQL之interactive_timeout和wait_timeout

文档简介:
客户反馈,应用程序经常会报连接失效需要重新建立连接。连接超时主要由interactive_timeout和wait_timeout影响,本篇文章针对这两个参数进行详细介绍。 for MySQL 版
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

背景

客户反馈,应用程序经常会报连接失效需要重新建立连接。连接超时主要由interactive_timeout和wait_timeout影响,本篇文章针对这两个参数进行详细介绍。

问题现象

MySQL客户端或应用程序,在与MySQL server建立连接后,如果一段时间没有操作,当再次操作时,常常会报如下错误:

这个报错,意味着当前连接已经断开了。超时的时间,跟interactive_timeout和wait_timeout的设置有关。其中,interactive_timeout针对交互式连接,wait_timeout针对非交互式连接。即,通过MySQL客户端连接数据库是交互式连接,通过JDBC连接数据库是非交互式连接。

原因分析

参数说明

interactive_timeout:服务器在关闭交互式连接前,客户端等待的秒数。

wait_timeout:服务器在关闭非交互式连接前,应用程序等待的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。

注意:这两个参数都对新连接生效。

测试验证

interactive_timeout和wait_timeout两个参数是如何相互影响的?

验证1:只修改全局变量interactive_timeout

(1) 交互式interactive_timeout

打开一个MySQL客户端修改interactive_timeout:

打开另一个MySQL客户端查看session级别的wait_timeout:

可以看到,session级别的wait_timeout已经继承了全局的interactive_timeout了。

(2) 非交互式interactive_timeout

打开另一个MySQL客户端,执行脚本查看session级别的wait_timeout:

输出结果:interactive_timeout 20 wait_timeout 3600

可以看到,session级别的wait_timeout没有继承interactive_timeout,依旧是3600。

验证2:只修改全局变量wait_timeout

(1) 交互式修改wait_timeout

打开一个MySQL客户端修改wait_timeout:

打开另一个MySQL客户端,查看session级别的wait_timeout:

可以看到,wait_timeout并没有随着wait_timeout的修改而改变,仍然保持是原来的20。

(2) 非交互式修改wait_timeout

打开另一个MySQL客户端,执行脚本查看session级别的wait_timeout:

输出结果,interactive_timeout 20 wait_timeout 100

可以看到,wait_timeout继承了interactive_timeout的值。

由以上测试可以看出,对于非交互式连接,当前连接wait_timeout继承全局的wait_timeout,对于交互式连接,当前连接wait_timeout继承全局的interactive_timeout。

解决方案

为避免MySQL客户端或应用程序出现连接不可用状态,建议:

  1. 应用程序:interactive_timeout(或者连带wait_timeout)的值设置要大于连接池超时时间
  2. MySQL客户端:interactive_timeout(或者连带wait_timeout)的值要大于客户端可能空闲的时间

结论建议

控制连接最大sleep超时时长的参数是:wait_timeout

  1. 对于非交互式连接,即JDBC连接,当前连接wait_timeout的值继承MySQL Server端全局变量wait_timeout的值;
  2. 对于交互式连接,即MySQL客户端连接,当前连接wait_timeout的值继承MySQL Server端全局变量interactive_timeout的值。
相似文档
  • 百度云支持更改数据库innodb_strict_mode设置参数,也可以session级别更改,该参数修改后立即生效,不需要重启实例: innodb_strict_mode=ON,表示使用严格模式,当创建表(CREATE TABLE)、更改表(ALTER TABLE)和创建索引(CREATE INDEX)语句时,如果写法有错误,不会有警告信息,而是直接抛出错误。 for MySQL 版
  • log_timestamps参数是MySQL在5.7.2版本新引入的参数,这个参数主要是控制MySQL的错误日志、慢查询日志、genera log等记录日志的显示时间参数,但不会影响写到表 (mysql.general_log, mysql.slow_log) 中的显示时间。 for MySQL 版
  • 云数据库 RDS(Relational Database Service)是一种专业、高性能、高可靠的云数据库服务,为您提供可靠的数据备份恢复、完备的安全管理、完善的监控、可轻松扩展等功能支持。相对于自建数据库,云数据库 RDS 具有更经济、更专业、更高效、更可靠、简单易用等特点,使您更专注于核心业务。 for MySQL 版 for SQL Server 版 for PostgreSQL 版
  • 用户在做性能测试时,可以参考以下推荐配置和测试方法自己做,也可以发工单让百度智能云工程师协助做。 下面环境,由客户根据需要选择。如果是跟其他云厂商做性能对比,注意保持多个环境一致。 for MySQL 版 for SQL Server 版 for PostgreSQL 版
  • 云数据库 RDS 资源因为欠费被暂停使用了,充值之后云数据库 RDS 实例会自动恢复吗? 云数据库 RDS 实例欠费后,状态会变成“欠费中”,用户续费后云数据库 RDS 实例会立刻恢复使用。 for MySQL 版
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部