`

MySQL里的wait_timeout

阅读更多

 

原文地址:http://hi.baidu.com/thinkinginlamp/blog/item/d9e0cb13b04c5428dd540111.html 

 

如果你没有修改过MySQL的配置,缺省情况下,wait_timeout的初始值是28800。

wait_timeout过大有弊端,其体现就是MySQL里大量的SLEEP进程无法及时释放,拖累系统性能,不过也不能把这个指设置的过小,否则你可能会遭遇到“MySQL has gone away”之类的问题,通常来说,我觉得把wait_timeout设置为10是个不错的选择,但某些情况下可能也会出问题,比如说有一个CRON脚本,其中两次SQL查询的间隔时间大于10秒的话,那么这个设置就有问题了(当然,这也不是不能解决的问题,你可以在程序里时不时mysql_ping一下,以便服务器知道你还活着,重新计算wait_timeout时间):

# vi /etc/my.cnf

[mysqld]
wait_timeout=10

# /etc/init.d/mysql restart


不过这个方法太生硬了,线上服务重启无论如何都应该尽可能避免,看看如何在MySQL命令行里通过SET来设置:

mysql> set global wait_timeout=10;

mysql> show global variables like 'wait_timeout';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| wait_timeout               | 10
   |
+----------------------------+-------+


这里一个容易把人搞蒙的地方是如果查询时使用的是show variables的话,会发现设置好像并没有生效,这是因为单纯使用show variables的话就等同于使用的是show session variables,查询的是会话变量,只有使用show global variables,查询的才是全局变量。

网络上很多人都抱怨说他们set global之后使用show variables查询没有发现改变,原因就在于混淆了会话变量和全局变量,如果仅仅想修改会话变量的话,可以使用类似set wait_timeout=10;或者set session wait_timeout=10;这样的语法。

另一个值得注意的是会话变量wait_timeout初始化的问题,这一点在手册里已经明确指出了,我就直接拷贝了:

On thread startup, the session wait_timeout value is initialized from the global wait_timeout value or from the global interactive_timeout value, depending on the type of client (as defined by the CLIENT_INTERACTIVE connect option to mysql_real_connect()).

MySQL大拿Jeremy Zawodny曾在他的文章Fixing Poor MySQL Default Configuration Values里面列出了几个很恶心的MySQL缺省设置,不过没包含wait_timeout,但我觉得它也应该算一个,每次新装MySQL后最好都记得修改它。

 

分享到:
评论

相关推荐

    MySQL wait_timeout连接超时

    MySQL的`wait_timeout`连接超时问题通常出现在长时间无操作的数据库连接上,服务器会自动关闭这些连接以释放资源。这种现象在应用中可能导致突然的数据通信中断,表现为“Communications link failure”等错误,提示...

    MySQL中interactive_timeout和wait_timeout的区别

    在MySQL中,`interactive_timeout` 和 `wait_timeout` 是两个重要的配置参数,它们与客户端连接到服务器的超时设置紧密相关。理解这两个参数的区别对于优化数据库性能和避免不必要的连接断开至关重要。 `...

    关于MySQL的wait-timeout连接超时问题报错解决方案.pdf

    2. 查看 wait_timeout 参数的值:可以通过 SHOW GLOBAL VARIABLES 命令来查看 wait_timeout 参数的值,例如:mysql> show global variables like 'wait_timeout'; 这将显示当前的 wait_timeout 值。 3. 避免使用 ...

    MySQL数据库连接超时(Wait_timeout)问题总结.pdf

    MySQL数据库的连接超时问题,通常表现为Wait_timeout错误,指的是当客户端与服务器之间的连接在指定时间内没有进行任何数据交互,数据库会自动断开这个连接,以释放资源并防止不必要的资源占用。这一特性在MySQL中是...

    关于MySQL的wait-timeout连接超时问题报错解决方案.docx

    在 MySQL 中,wait_timeout 参数是控制连接超时的关键参数。当该参数设置的太大时,可能会导致 MySQL 中大量的 SLEEP 进程无法及时释放,拖累系统性能。然而,如果将其设置的太小,可能会遭遇到“MySQL has gone ...

    mysql提示got timeout reading communication packets的解决方法

    错误提示: user: ‘root’ host: `localhost’ (Got timeout reading communication ...wait_timeout 的默认值这:120 根据情况增加吧. 这两个值是一个全局变量,可以动态增加,如: mysql> set global interactiv

    解决mysql出现大量TIME_WAIT

    - `net.ipv4.tcp_fin_timeout=30`:缩短TIME_WAIT状态的持续时间,单位为秒。 2. **使配置生效**:执行`sysctl -p`命令,使修改后的参数立即生效。 ### 三、优化MySQL配置 除了系统层面的优化,对MySQL数据库...

    mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案

    增加 MySQL 的 wait_timeout 属性的值。 修改 /etc/mysql/my.cnf文件,在 [mysqld] 节中设置: # Set a connection to wait 8hours in idle status. wait_timeout =86400 相关参数,红色部分 mysql> show variables...

    javaee mysql空闲关闭

    然而,为了优化资源使用,MySQL配置了一个参数`wait_timeout`,这个参数定义了连接在空闲多长时间后会被自动关闭。当JavaEE应用中的数据库连接在超过这个设定的时间没有执行任何操作,MySQL服务器会断开这个连接,这...

    还原大备份mysql文件失败的解决方法分享

    2. **wait_timeout** 和 **interactive_timeout**: 这两个参数分别定义了非交互式连接和交互式连接在无活动状态后等待多久关闭。在上述例子中,它们都被设置为2880000秒(约80小时)。这有助于防止长时间运行的还原...

    MySQL性能优化之参数配置.docx

    wait_timeout 参数控制着 MySQL 客户端的数据库连接闲置最大时间值。默认的 wait_timeout 值为 8 小时,这个值太大,可能会导致连接数爆炸。通过修改 wait_timeout 值为 30 分钟,可以减少连接数的爆炸风险。 修改 ...

    MySQL和连接相关的timeout 的详细整理

    MySQL中的各种timeout设置是数据库管理中的重要参数,它们关乎到系统的稳定性和性能。这些timeout值主要涉及连接建立、数据传输以及连接空闲时的管理,确保了资源的有效利用和系统的高效运行。 首先,`slave_...

    解决SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded_runtimeerror怎么修复

    在MySQL数据库操作中,"SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded" 是一个常见的错误,它意味着在执行事务时,系统等待锁定资源的时间超过了预设的限制。这个错误通常发生在并发环境中,当...

    Spring Boot如何解决Mysql断连问题

    这个问题是由于 Mysql 的.wait_timeout 参数所致,默认情况下,wait_timeout 的值是 8 小时,如果连接空闲时间超过 8 小时,Mysql 将自动关闭这个连接。 导致断连的原因是 Mysql 的默认行为。Mysql 在发现一个连接...

    关于mysql提示too many connections问题解决方法.doc

    与`wait_timeout`类似,但适用于交互式会话,如MySQL客户端。 ### **永久解决方案** 1. **修改配置文件**: - 对于MySQL 8之前的版本,需要编辑`my.cnf`配置文件(通常位于`/etc/mysql/my.cnf`)。在`[mysqld]`...

Global site tag (gtag.js) - Google Analytics