mysql无法连接_谈谈MySQL无法连接的原因和分析方法

【可能的原因】

MySQL无法连接的原因有很多,比如:

1、数据库的请求量突增,实例连接数超过max_connections,或用户连接数超过max_user_connections,

这种情况连接时客户端一般会抛出对应的错误信息

如果max_connections打满,无法连到MySQL,可以尝试用gdb来修改参数

sudo gdb -p $(cat /var/run/mysqld/mysqld.pid) -ex "set max_connections=6000" –batch

2、MySQL使用的Max open files或Max processes超过操作系统限制

修改系统配置文件,可参考前面的文章:

CentOS 6

CentOS 7

3、磁盘空间不足

4、服务器负载过高,CPU消耗高,IO响应非常慢的情况也可能导致MySQL Hang住

5、MySQL内部锁等待

可以通过show engine innodb status的内容来判断

6、MySQL Bug引起

【分析思路】

如果用客户端连不上MySQL的情况下

1、先检查MySQL 的error log文件和操作系统的日志文件

2、检查是否网络问题,ping和telnet ip port

3、查询性能监控工具,观察连接数或并发线程数是否过高

4、检查是否服务负载过高引起

5、通过mysqld的进程号在系统层面来找到句柄的信息,来查看show engine innodb status的内容,方法如下:

(1)执行lsof -c mysqld|grep deleted,可以看到/data/tmp/ibkB49ZF映射的5号文件,句柄内容非空,它就是show engine innodb status的内容

8ea1155d6034bc3123de8b044865f2f2.png

(2)找到mysqld的进程号,echo `pidof mysqld`,7358

(3)查看5号文件的内容cat /proc/7358/fd/5

6、通过systemtap工具,可以在不登录MySQL的情况下查看正在执行的语句,脚本如下(不建议在生产环境直接使用)

0d4ca3e103da7c7986b9d991fa6a6d2c.png

mysql无法连接_谈谈MySQL无法连接的原因和分析方法_第1张图片

你可能感兴趣的:(mysql无法连接)