讓 MySQL / MariaDB 出現問題無法連上時自動重開

建立資料庫連線時發生錯誤 Error establishing a database connection
最近我代管的 Wordpress 經常無法順利連上,大概一到兩天就會出現一次建立資料庫連線時發生錯誤(Error establishing a database connection),無法連上,而 MySQL 的 log 也看不到甚麼,後來發現原來是 Out of memory。

如果直接嘗試使用 mysql 指令登入,則會看到這個錯誤訊息:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
也就是說, /var/run/mysqld/mysqld.sock 是消失不見了。

這時,我們要做的,是讓資料庫重開,樣我們可以重新連上,但每次都要人手發現問題並重開真是一個很蠢的方法。為此我決定要寫一個 script ,它在不增加 mysqld 工作量的情況下也可以在發現問題後自動重開資料庫。

systemctl status mysql | grep running || systemctl restart mysql

如果你的電腦並不是使用 systemd ,可以改成用 service 。
service mysql status | grep running || service mysql restart ## 用了上面的 systemctl 方法就不用這個

這個 script 只是在確定出問題後重開 mysql,但我們會希望可以進一步讓它自動執行,於是我們可以使用 crontab,首先切換成 root,然後執行。

sudo -i
crontab -e
接著把這行加到最底,代表每分鐘要檢查一次。
* * * * * systemctl status mysql | grep running || systemctl restart mysql

完成,這樣資料庫再失效時,就可以在 1 分鐘內自動發現並重啓了。

留言

這個網誌中的熱門文章

如何在ubuntu中compile kernel(12.10)