Hướng dẫn dùng cronjob lập lịch tự động restart Mysql khi server quá tải
- 16-01-2022
- Toanngo92
- 0 Comments
Mục lục
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 mysql
Hoặc:
sudo service mysqld status
// kiểm tra trạng thái nếu sử dụng mariadb
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 restart
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 permission
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.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"
fi
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.sh
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.sh
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.
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 stop
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.sh
Nếu chạy đúng, dòng văn bản này sẽ hiển thị
MySQL Service was down. Restarting now..
Kiểm tra lại trạng thái lần cuối xem đã thành công chưa:
sudo service mysql status
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 nano
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ơn
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 ...
Chúc bạn thành công !