Mysql

捕捉無響應/高負載的mysql,也許是用monit?

  • June 19, 2010

我間歇性地出現 mysql 導致機器上的高負載,使 Web 應用程序不可用。我正在使用monit來監控它,但它沒有發現問題,顯然是因為它仍然可以連接到mysql。這是我的mysql監控腳本:

check process mysqld with pidfile /var/run/mysqld/mysqld.pid
   group database
   start program = "/etc/init.d/mysql start"
   stop program = "/etc/init.d/mysql stop"
   if failed port 3306 protocol mysql then restart
   if failed unixsocket /var/run/mysqld/mysqld.sock protocol mysql then restart
   if 5 restarts within 5 cycles then timeout

當問題發生時,機器上的負載很高,mysql 佔用了幾乎所有的 cpu。您仍然可以使用mysql命令行工具“登錄”到 mysql,但任何選擇/更新都不會響應。

當這個問題出現時,我應該用什麼來捕捉?

通過 MySQL 客戶端檢查程序列表。( show full processlist;) 從那時起,您可以隔離查詢在哪裡執行以及是否需要優化或是否應該停止優化。

從那時起,您可以kill $NUMBER;終止問題連接,而不是重新啟動 MySQL。

由於不希望的操作重新啟動已經在執行的東西應該​​是最後的手段,通常是一個壞主意。尤其是數據庫,因為您冒著數據風險。

當然,具體情況決定了不同的行動。例如,如果您知道特定軟體中存在失控的記憶體洩漏,則沒有任何操作正在執行,恢復資源的唯一方法是重新啟動:然後這樣做。

此外,如果您每分鐘都損失大量資金,則重新啟動可能是合理的。例如,如果您看不到快速恢復的路徑,並且您認為重新啟動將恢復服務,那麼如果數據或應用程序的風險將小於您正在損失的資金,那麼重新啟動將是有意義的。此原則適用,但可能會根據您的行業、服務和 SLA 略有不同。

引用自:https://serverfault.com/questions/152792