wait_timeout and interactive_timeout 参数

  • 非交互模式连接:通常情况下,应用到RDS实例会采用非交互模式,具体采用哪个模式需要查看应用的连接方式配置,比如PHP通过传递MYSQL_CLIENT_INTERACTIVE常量给mysql_connect()函数即可开启连接的交互模式。wait_timeout参数控制非交互模式连接的超时时间(单位秒,默认值为24小时即86400秒),当非交互式连接空闲时间超过wait_timeout指定的时间后,RDS实例会主动关闭连接。
  • 对于交互模式连接:通过 mysql 客户端 与 mysql server 建立的连接是交互式连接,interactive_timeout参数控制交互模式连接的超时时间(单位秒,默认值为2小时即7200秒),当交互式连接空闲时间超过interactive_timeout指定的时间后,RDS实例会主动关闭连接。
  • wait_timeout和interactive_timeout这两个参数的修改,修改前已经存在的会话保持修改前的设置,修改后新创建的会话使用新的参数设置。

wait_timeout指的是“连接完成后,使用过程中”的等待时间

参数 作用
wait_timeout 非交互式连接建立完成后,使用过程中的等待时间(单位:秒)
interactive_timeout 交互式连接建立完成后,使用过程中的等待时间(单位:秒)

MySQL 8.0.26

client A client B client C
T1 mysql -h -P -u -p
set global wait_timeout = 10;
set global interactive_timeout = 20;
select @@global.wait_timeout, @@global.interactive_timeout;
result (10, 20)
T2 mysql -h -P -u -p
select @@session.wait_timeout, @@session.interactive_timeout;
result (20, 20)
db = pymysql.connect()
cursor = db.cursor()
cursor.execute("select @@session.wait_timeout, @@session.interactive_timeout;")
result (10,20 )
T3 set @@session.wait_timeout = 10;
select @@session.wait_timeout, @@session.interactive_timeout;
result (10, 20)
T4 wait 15s time.sleep(15)
T5 select @@session.wait_timeout, @@session.interactive_timeout;
(ERROR 4031 (HY000): The client was disconnected by the server because of inactivity. See wait_timeout and interactive_timeout for configuring this behavior.)
result(20,20)
cursor.execute("select @@session.wait_timeout, @@session.interactive_timeout;")
pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
T6 set @@session.wait_timeout = 20;
set @@session.interactive_timeout = 10;
select @@session.wait_timeout, @@session.interactive_timeout;
result (20, 10)
cursor.execute("set @@session.wait_timeout = 20;")
cursor.execute("set @@session.interactive_timeout = 10;")
�cursor.execute("select @@session.wait_timeout, @@session.interactive_timeout;")
result(20, 10)
T7 wait 15s time.sleep(15)
T8 select @@session.wait_timeout, @@session.interactive_timeout;
(Query OK)
result(20,10)
�cursor.execute("select @@session.wait_timeout, @@session.interactive_timeout;")
(Query OK)
result(20,10)

client A 在 T1 时刻将全局变量 wait_timeout 和 interactive_timeout 分别设置为 10s 和 20s。

client B 在 T2 时刻通过 mysql 客户端与 mysql server 建立连接(交互式连接),该连接中会话变量 wait_timeout 和 interactive_timeout 分别为 20s 和 20s, 因此可知交互式连接的会话变量 wait_timeout 和 interactive_timeout 都继承自全局变量 interactive_timeout 的值,接着 client B 在 T3 时刻,将会话变量 wait_timeout 设置为 10s,之后等待 15s,再查看会话变量 wait_timeout、interactive_timeout 时,发现连接已经断开,这说明交互式连接的连接闲置阈值由会话变量 wait_timeout 控制,client B 在 T6 时刻,将会话变量 wait_timeout 和 interactive_timeout 的值分别设置为 20s 和 10s,之后同样等待 15s,在 T8 时刻,再查看会话变量 wait_timeout、interactive_timeout 时,发现连接依旧未断开,直到 20s 后才断开连接,因此可知交互式连接的连接闲置阈值由会话变量 wait_timeout 控制,与会话变量 interactive_timeout 无关。

client C 在 T2 时刻通过 pymysql 与 mysql server 建立连接(非交互式连接),该连接中会话变量 wait_timeout 和 interactive_timeout 分别为 10s 和 20s, 因此可知非交互式连接的会话变量 wait_timeout 和 interactive_timeout 分别继承全局变量 wait_timeout 和 interactive_timeout 的值,接着 client C 在 T4 时刻等待 15s,再查看会话变量 wait_timeout、interactive_timeout 时,发现连接已经断开,这说明非交互式连接的连接闲置阈值由会话变量 wait_timeout 控制,client C 在 T6 时刻将会话变量 wait_timeout 和 interactive_timeout 的值分别设置为 20s 和 10s。之后等待 15s,在 T8 时刻,再查看会话变量 wait_timeout、interactive_timeout 时,发现连接依旧未断开,直到 20s 后才断开连接,因此可知非交互式连接的连接闲置阈值由会话变量 wait_timeout 控制,与会话变量 interactive_timeout 无关。

总结

  1. 交互式连接的会话变量 wait_timeout 和 interactive_timeout 都继承自全局变量 interactive_timeout 的值
  2. 非交互式连接的会话变量 wait_timeout 和 interactive_timeout 分别继承自全局变量 wait_timeout 和 interactive_timeout
  3. 无论是交互式连接还是非交互式连接,连接闲置阈值都由会话变量 wait_timeout 控制,与会话变量 interactive_timeout 无关。

FAQ

为什么叫交互式和非交互式连接?通俗解释不知道?

wait_timeout 和 interactive_timeout 参数应设置为多大?

  • 参数 wait_timeout 和 interactive_timeout 应尽量设置成相同
  • 设置为多大取决于业务,如果你面对的是成熟的开发(比如公司内部团队),可以设置小些,分钟级别就行。

参考资料

MySQL会话闲置时间控制
如何处理RDS MySQL连接数满情况

wait_timeout and interactive_timeout 参数的更多相关文章

  1. MySQL:参数wait_timeout和interactive_timeout以及空闲超时的实现【转】

    一.参数意思 这里简单解释一下两个参数,含义如下: interactive_timeout:The number of seconds the server waits for activity on ...

  2. mysql wait_timeout和interactive_timeout总结

      (1)interactive_timeout:参数含义:服务器关闭交互式连接前等待活动的秒数.交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE ...

  3. wait_timeout 和 interactive_timeout

    wait_timeout 和 interactive_timeout Table of Contents 1. 参数说明 2. 原代码 3. interactive_timeout覆盖wait_tim ...

  4. MySQL 各种超时参数的含义

    MySQL 各种超时参数的含义 今日在查看锁超时的设置时,看到show variables like '%timeout%';语句输出结果中的十几种超时参数时突然想整理一下,不知道大家有没有想过,这么 ...

  5. Got timeout reading communication packets解决方法

    Got timeout reading communication packets解决方法 http://www.th7.cn/db/mysql/201702/225243.shtml [Note] ...

  6. 内网服务器离线编译安装mysql5.7并调优

    目录 内网服务器离线编译安装mysql5.7并调优 前言 关于MySQL 一.MySQL安装篇 部署环境 前期准备工具 挂载系统ISO镜像,配置yum源 二.MySQL调优篇 1.对MySQL进行安全 ...

  7. 关于Aborted connection告警日志的分析

    前言: 有时候,连接MySQL的会话经常会异常退出,错误日志里会看到"Got an error reading communication packets"类型的告警.本篇文章我们 ...

  8. MySQL中的配置参数interactive_timeout和wait_timeout(可能导致过多sleep进程的两个参数)

    1)interactive_timeout:参数含义:服务器关闭交互式连接前等待活动的秒数.交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的 ...

  9. MySQL中interactive_timeout和wait_timeout的区别

    在用mysql客户端对数据库进行操作时,打开终端窗口,如果一段时间没有操作,再次操作时,常常会报如下错误: ERROR (HY000): Lost connection to MySQL server ...

  10. interactive_timeout和wait_timeout(

    mysql> show variables like "%timeout%"; +-----------------------------+----------+ | Va ...

随机推荐

  1. pack.json中的^ ~的区别

    在版本说明前面还有个符号:'^'(插入符号)和'~'(波浪符号),他们之间的区别:例如: '~'(波浪符号):他会更新到当前minor version(也就是中间的那位数字)中最新的版本.放到我们的例 ...

  2. 前端ffmpeg实现视频剪切

    利用ffmpeg实现纯前端视频剪切 注意:在新版本Chrome浏览器中由于安全性问题,只能在https或localhost当中才能正常使用 1. 下载ffmpeg npm install @ffmpe ...

  3. odoo 开发入门教程系列-计算的字段和变更(Computed Fields And Onchanges)

    计算的字段和变更(Computed Fields And Onchanges) 模型之间的关系是任何Odoo模块的关键组成部分.它们对于任何业务案例的建模都是必要的.然而,我们可能需要给定模型中字段之 ...

  4. python---滚动条操作

    """ 1.让元素滚动到可见区域后,再操作.(大部分的网页自己会滚,直接找元素---下一页) drive.find_element("id",&quo ...

  5. OpenAI API

    OpenAI API Documentation https://platform.openai.com/docs/models/overview GPT 迭代过程 版本 发布时间 训练方案 参数量 ...

  6. 迁移学习(CLDA)《CLDA: Contrastive Learning for Semi-Supervised Domain Adaptation》

    论文信息 论文标题:CLDA: Contrastive Learning for Semi-Supervised Domain Adaptation论文作者:Ankit Singh论文来源:NeurI ...

  7. 微服务为什么要用到 API 网关?

    本文介绍了 API 网关日志的价值,并以知名网关 Apache APISIX 为例,展示如何集成 API 网关日志. 作者程小兰,API7.ai 技术工程师,Apache APISIX Contrib ...

  8. Java线程中断机制

    在阅读AQS源码以及juc包很多基于AQS的应用源码过程中,会遇到很多interrupted相关的方法,这里复习一下java线程中断相关. 要点:使用interrupt()中断一个线程,该方法只是标记 ...

  9. Python OOP之继承封装多态

    面向对象的三大特征 继承 封装 多态 继承 子类可以使用父类定义的内容或者行为 继承的实现 父类,基类,超类,被继承的类,Base Class,Super Class 子类:有继承行为的类 所有类都必 ...

  10. Win Node.js安装教程

    前言: 一.下载 下载地址:https://registry.npmmirror.com/binary.html?path=node/ 二.安装(以下为傻瓜式安装操作)  三.验证安装 to be c ...