Hướng dẫn dùng cronjob lập lịch tự động restart Mysql khi server quá tải

1. Restart Mysql thủ công khi quá tải

MySQL có thể gặp sự cố khi hết bộ nhớ hoặc vì một số vấn đề khác trong trường hợp của mình là khi server chạy nhiều site khác nhau. Trong hầu hết các trường hợp, chúng ta có thể giải quyết vấn đề này bằng cách khởi động lại dịch vụ MySQL thủ công.

Để kiểm MySQL có đang chạy hay không, chạy câu lệnh:

sudo service mysql status
// kiểm tra trạng thái mysqlCOPY

Hoặc:

sudo service mysqld status
// kiểm tra trạng thái nếu sử dụng mariadbCOPY

Nếu trạng thái Mysql đã tắt, khởi động lại bằng dòng lệnh:

sudo service mysql restart
// hoặc
sudo service mysqld restartCOPY

Nếu làm thủ công như vậy thì đơn giản rồi, tuy nhiên nếu csdl bị quá tải vào giữa đêm, khi chúng ta đang ngủ thì website truy cập sẽ bị gián đoạn, dó chính là vấn đề, vậy làm sao để giải quyết vấn đề này ?

Với linux/Centos, hệ điều hành cung cấp cho chúng ta tính năng Cron , đó là một công cụ lập lịch công việc tự động chạy tập lệnh dựa trên thời gian cho Linux để có thể chạy các tập lệnh mà chúng ta không cần thao tác thủ công nữa.

2. Tạo một kịch bản (Bash script) khởi động lại MySQL

Bạn có thể cấu hình cron để tự động kiểm tra trạng thái của máy chủ MySQL và khởi động lại nó nếu nó gặp sự cố. Tất nhiên, đây không phải là một bản sửa lỗi vĩnh viễn cho máy chủ MySQL tồi tàn của bạn, nhưng nó có thể giúp bạn mất thời gian cho đến khi bạn có thể điều tra thêm.

Trước tiên, chúng ta cần tạo một tập lệnh BASH đơn giản và lưu trữ nó trong thư mục chính (hoặc bất cứ nơi nào bạn muốn), sau đó hướng dẫn cron chạy tập lệnh BASH này mỗi phút một lần.

Bạn có thể đặt tập lệnh này ở bất cứ đâu, nhưng trong ví dụ này, mình sẽ đặt nó trong thư mục root. hoặc, bạn có thể sử dụng bitvise để truy cập tới server và tạo folder mô phỏng theo dòng lệnh của mình, tiếp theo, tạo một folder tên là scripts

cd /root/
// change directory to root folder
sudo mkdir scripts
// make dir scripts with root permissionCOPY
sử dụng bitvise truy cập vào thư mục root

Truy cập vào thư mục scripts vào tạo file mysqlmon bằng công cụ nano ( trình biên tập dữ liệu trên terminal linux), hoặc sử dụng bitvise để tạo file này

cd scripts
sudo nano mysqlmon.shCOPY
Dùng bitvise tạo mysqlmon.sh

Chèn đoạn code này vào file mysqlmon.sh vừa tạo tùy theo dịch vụ của bạn là mysql hay mysqld nhé:

#!/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

// sử dụng 1 trong 2 đoạn code này phù hợp server của bạn, chỉ khác nhau mysql và mysqld

#!/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"
fiCOPY

Nếu sử dụng nano, lưu lại và thoát (bấm tổ hợp phím Ctrl + X , bấm Y(yes) sau đó bấm enter)

Cấp quyền thực thi cho kịch bản:

sudo chmod +x mysqlmon.shCOPY

3. Kiểm tra file kịch bản vừa tạo xem đã hoạt động đúng chưa

Chạy dòng lệnh này để thực thi file script vừa tạo:

sudo ./mysqlmon.shCOPY

Nếu dịch vụ Mysql vẫn chạy, terminal sẽ hiển thị dòng:

MySQL Service is running already. Nothing to do here.COPY

Nếu bạn muốn xem điều gì sẽ xảy ra khi tập lệnh phát hiện nếu MySQL gặp sự cố, hãy dừng dịch vụ MySQL, hãy lưu ý công đoạn này, server của bạn sẽ bị lỗi tạm thời do không load được database:

sudo service mysql stopCOPY

Sau khi stop, thử chạy lại file mysqlmon.sh vừa tạo xem có nhận diện được và khởi động lại mysql không:

sudo ./mysqlmon.shCOPY

Nếu chạy đúng, dòng văn bản này sẽ hiển thị

MySQL Service was down. Restarting now..COPY

Kiểm tra lại trạng thái lần cuối xem đã thành công chưa:

sudo service mysql statusCOPY

4. Tự động hóa việc chạy file script bằng tính năng cron

Tạo file cron bằng nano hoặc bitvise:

cd ~
cd /etc/cron.d
// chuyển tơi thư mục etc/cron.d
nano -w auto_restart
// khởi tạo file auto_restart với trình biên tập nanoCOPY

Paste dòng lệnh này vào file auto_restart

*/1 * * * * root /root/scripts/mysqlmon.sh >/dev/null 2>&1
// chạy file này 1 phút 1 lần, tăng số 1 lên nhiều nếu bạn muốn thời gian tự động chạy lâu hơnCOPY
file auto_restart hiển thị trong cron.d

Lưu lại file cron để hoàn tất.

Lưu ý, khi sử dụng cách này, bạn sẽ không thể tìm thấy lệnh cron bằng dòng lệnh crontab -l , để xem lệnh của bạn đã được nhận diện chưa, sử dụng dòng lệnh:

head -n -0 /var/spool/cron/* /etc/crontab /etc/cron.d/*
// xem các kịch bản tự động chạy trong thư mục cron.d
ls /etc/cron.{hourly,daily,weekly,monthly}/
// xem các file cron tự động chạy trong các thư mục cron theo giờ, ngày, tuần, tháng ...COPY

Chúc bạn thành công !

Nguồn: https://web888.vn/huong-dan-dung-cronjob-lap-lich-tu-dong-restart-mysql-khi-server-qua-tai/