【可能的原因】
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的情況下查看正在執行的語句,腳本如下(不建議在生產環境直接使用)