CentOS Linux 設定 MySQL/MariaDB 出問題時自動重新啟動

這裡介紹如何在 CentOS Linux 中設定 systemd,讓 MySQL/MariaDB 資料庫在不正常停止時可以自己重新啟動。

自己用 VPS 架設網站的話,網頁伺服器與資料庫的維護都要自己處理,在 CentOS Linux 中的 MariaDB 資料庫預設在安裝好之後,雖然可以正常使用,但是如果系統因為某些原因(例如記憶體不足)造成 MariaDB 資料庫服務中止時,它是不會自動重新啟動的,也就是說如果 MariaDB 不小心停止,整個網站就停擺了。

自動重啟 MariaDB 服務

如果要讓 CentOS Linux 中的 MariaDB 服務在停止時,可以自動嘗試重新啟動的話,可以修改一下 systemd 的 MariaDB 啟動設定檔。

CentOS Linux 7 中 systemd 的 MariaDB 啟動設定檔放在 /etc/systemd/system/multi-user.target.wants/mariadb.service,不過這個檔案是一個連結檔,它連結到系統上預設的設定檔,系統在更新時會將其內容覆蓋掉,所以不建議直接修改這個檔案的內容。

比較好的作法是在 /etc/systemd/system/mariadb.service.d/ 這個目錄中(若不存在則自己新增),新增一個 restart.conf 設定檔,將設定寫在其中:

[Service]
Restart=always
RestartSec=3

這裡我們將 Restart 設定為 always,代表只要服務停止就自動重新啟動,而 RestartSec 則是間隔秒數。

設定好之後,必須讓 systemd 重新載入設定值:

sudo systemctl daemon-reload

接著重新啟動 MariaDB 服務:

sudo systemctl restart mariadb

確認 MariaDB 服務有正常啟動:

sudo systemctl status mariadb

測試

設定好之後,我們可以手動把 MariaDB 的行程砍掉,模擬 MariaDB 資料庫不正常中止,看看 systemd 會不會自動重新啟動 MariaDB 服務。

首先找出 MariaDB 服務的行程 ID:

# 找出 MariaDB 服務的行程 ID
ps -ef | grep mariadb

砍掉 MariaDB 服務:

kill 行程ID

等待三秒鐘之後,再看看 MariaDB 是否有重新啟動:

# 檢查 MariaDB 是否有重新啟動
ps -ef | grep mariadb

參考資料:serverfault

Linux

1 Comment

  1. vincent

    您好,
    我前兩天有留言關於我restart不順利的事情
    後來我搞懂了 是我 restart.conf 的參數 RestartSec
    這裡打錯~

    昨天再次檢查發現了 現在很順利
    抱歉打擾了

    也再次感謝你分享的文章

Leave a Reply