【可能的原因】
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
MySQL Can't create a new thread报错分析
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的内容
(2)找到mysqld的进程号,echo `pidof mysqld`,7358
(3)查看5号文件的内容cat /proc/7358/fd/5
6、通过systemtap工具,可以在不登录MySQL的情况下查看正在执行的语句,脚本如下(不建议在生产环境直接使用)