談談MySQL無法連線的原因和分析方法
【可能的原因】
SQL/">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
ofollow,noindex">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的情況下檢視正在執行的語句,指令碼如下(不建議在生產環境直接使用)