Tự khởi động lại các dịch vụ MySQL, PHP-FPM, Nginx khi website sập. Nghe hay nhỉ, đỡ thời gian chết không đáng có.
Trong quá trình hoạt động của server nếu MySQL bị crash và service bị dừng thì website của bạn sẽ bị lỗi. Điều này gây ảnh hưởng nghiêm trọng tới người dùng nếu không sớm được khắc phục.
Do đó trong bài viết này, mình sẽ hướng dẫn các bạn tự động khởi động lại MySQL Server nếu service bị dừng, đảm bảo server hoạt động liên tục.
1. Nguyên nhân MySQL bị dừng
Với các website sử dụng MySQL là nơi lưu trữ dữ liệu, chắc chắn một điều là nếu MySQL không hoạt động, thì website của bạn chắc chắn sẽ bị lỗi, và người dùng không thể sử dụng website của bạn một cách bình thường. Càng khắc phục sớm thì thiệt hại càng nhỏ. Do đó chúng ta cần phải kiểm tra tự động, nếu service của MySQL bị dừng thì cần khởi động lại ngay lập tức hoặc gửi cảnh báo tới người quản trị website.
Nguyên nhân MySQL bị dừng thì rất đa dạng, có thể do lượng truy cập quá lớn, do hết bộ nhớ, do query lỗi….
2. Tự động bật MySQL
Như vậy để đảm bảo Server/VPS hoạt động liên tục thì ta phải kiểm tra xem MySQL có hoạt động bình thường hay không, nếu không thì cần restart lại service.
Bài viết sẽ minh hoạ cho cơ sở dữ liệu MySQL trên hệ điều hành Centos, tuy nhiên bạn có thể hoàn toàn áp dụng tương tự với MariaDB và trên các hệ điều hành khác như Ubuntu, Debian…
Cách 1. Sử dụng lệnh
Cách này rất đơn giản, chúng ta chạy một câu lệnh để kiểm tra xem MySQL có hoạt động bình thường không, nếu không thì chạy restart
systemctl is-active --quiet mysqld || systemctl restart mysqld
Để Server có thể check liên tục thì chúng ta sẽ đưa lệnh này vào trong cronjob
Mỗi phút kiểm tra một lần (bạn có thể thay đổi thời gian check tuỳ theo nhu cầu)
* * * * * systemctl is-active --quiet mysqld || systemctl restart mysqld
Tương tự cho MariaDB
* * * * * systemctl is-active --quiet mariadb || systemctl restart mariadb
Với Ubuntu Server
* * * * * systemctl is-active --quiet mysql || systemctl restart mysql
Cách 2. Sử dụng Bash Script
Cách này tương tự như cách trên, nhưng phức tạp hơn xíu là chúng ta sẽ viết một file script, để check và restart MySQL, sau đó chạy bash này trong cronjob
Di chuyển đến thư mục home
cd /home/
Tạo một thư mục mới gọi là scripts
sudo mkdir scripts
Di chuyển tới thư mục này
cd scripts
Tạo một file mới là mysqlmon.sh bạn có thể dùng trình soạn thảo sẵn có, ví dụ nano
sudo nano mysqlmon.sh
Dán nội dung như sau với Centos
#!/bin/bash
# Check if MySQL is running
sudo service mysqld status > /dev/null 2>&1
# Restart the MySQL service if it's not running.
if [ $? != 0 ]; then
echo -e "MySQL Service was down. Restarting now...\n"
sudo service mysqld restart
else
echo -e "MySQL Service is running already. Nothing to do here.\n"
fi
Nếu là Ubuntu
#!/bin/bash
# Check if MySQL is running
sudo service mysql status > /dev/null 2>&1
# Restart the MySQL service if it's not running.
if [ $? != 0 ]; then
echo -e "MySQL Service was down. Restarting now...\n"
sudo service mysql restart
else
echo -e "MySQL Service is running already. Nothing to do here.\n"
fi
Tiến hành lưu file (ấn CTRL
+ X
, ấn Y
sau đó ấn ENTER
)
Cấp quyền thực thi cho file.
sudo chmod +x mysqlmon.sh
Kiểm tra xem script đã hoạt động đúng hay chưa
Chạy thử
sudo ./mysqlmon.sh
Nếu MySQL đang chạy bình thường, sẽ có thông báo:
MySQL Service is running already. Nothing to do here.
Thử mô phỏng hiện tương MySQL bị dừng bằng cách chạy lênh stop
sudo service mysqld stop
Giờ test lại script
sudo ./mysqlmon.sh
Kết quả sẽ là:
MySQL Service was down. Restarting now..
Bước cuối cùng là chạy script trong cronjob
sudo EDITOR=nano crontab -e
Dán đoạn lệnh sau vào cuối file
* * * * * /home/scripts/mysqlmon.sh > /dev/null 2>&1
Lưu lại (nhấn CTRL
+ X
, nhấn Y
và nhấn ENTER
)
Như vậy server sẽ check mỗi phút một lần và khởi động lại MySQL nếu bị dừng
Từ khoá: auto start mysql if stop, Script to Auto Restart MySQL, auto restart mysql if crash, auto restart Mysql bash, centos, ubuntu, vps