MySQL 连接满载假死状态的解决方案

MySQL 连接满载假死状态的解决方案

author: he xiaodong date: 2019-04-12

日常情况接近满载之前,或者预估可能有连接满了的情况,可以提前调高 max_connections 的数量,调低未活跃的连接断开的时间,参数为interactive_timeout,根据需求设置。修改之后可以登录 MySQL, 然后执行show global variables like 'max_conn%' 查看修改后的情况。

场景是:mysql 连接满了,账户登录的时候已经提示 ERROR 1040 (HY000): Too many connections,无法登录,也是一种假死状态了。这种情况也适用于 MySQL 链接池满了的情况。

暴力修改配置,重启

这个很明显,反正业务已经卡了,不如迅速解决问题,最直接的就是改配置,重启服务了,直接找到 my.cnf 文件,修改 max_connections 参数,然后重启 mysqld 服务。

gdb 动态修改配置

命令为: gdb -p $(cat /data/3306/tmp/mysql.pid) -ex "set max_connections=1100" --batch,实际上还是调整配置,只是不用重启了。PS: gdb 是一种调试手段,可能会直接让服务挂掉,不到万不得已,不推荐使用。

mysql5.7 及以上版本可以用 root 账户登录

前置条件是你的项目使用的是非超级用户连接的,MySQL版本为5.7及以上
mysql5.7 的时候,设计者在 max_connections 配置的数量中额外 +1 个连接,为有 show pricesslist 权限的超级用户预留的,就是为了遇到连接满载的情况可以方便超级管理员去解决,对应文档: MySQL max_connections doc

其他微操作

在初期可以为数据库配置多个端口,新端口预留 5-50 个连接,为了能够让管理人员通过新端口连接,然后监控整个 mysql 服务的状态,在有突发情况时可以通过新端口登录到 mysql 进行处理。此处可以参考 mysql multi 配置部分 - 文档

以上的手段都多是在遇到问题时的解决方法,想避免问题就是提前多关注日志,尤其慢查询日志,他能展示项目用到的 sql 的很多问题,在上架活动或者什么的时候,做好预估。

AD: 顺道推广小册赚点佣金 ↣ 点此跳转

© 原创文章,转载请保留文章地址和作者信息