TỰ ĐỘNG KHỞI ĐỘNG LẠI MYSQL, PHP-FPM, NGINX KHI GẶP SỰ CỐ

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