Tạo crontab tự động bật lại MySQL khi bị stop trên VPS/Server

Với những VPS có RAM ít và bạn không rõ về config MySQL dẫn tới hiện tượng thi thoảng website quá tải và bị lỗi không thể kết nối tới database. Bài viết này sẽ hướng dẫn bạn cách khắc phục lỗi chết MySQL và tạo crontab  tự động khởi động lại dịch vụ MySQL trên VPS/Server khi  website bị hiển thị lỗi tương tự như dưới:

Error establishing a database connection

This either means that the username and password information in your wp-config.php file is incorrect or we can’t contact the database server at localhost. This could mean your host’s database server is down.

  • Are you sure you have the correct username and password?
  • Are you sure that you have typed the correct hostname?
  • Are you sure that the database server is running?

If you’re unsure what these terms mean you should probably contact your host. If you still need help you can always visit the WordPress Support Forums.

1. Lệnh bật lại dịch vụ MySQL

Trên VPS Centos

Centos 6 (MariaDB cũng dùng chung lệnh) :

service mysql start

hoặc /etc/init.d/mysql start

Centos 7: 

MySQL:

systemctl start mysql.service
MariaDB:
systemctl start mariadb.service
Trên VPS Ubuntu
/etc/init.d/mysql start
Hoặc
/etc/init.d/mysqld start

Tùy trường hợp cụ thể trên server của bạn là mysql hay mysqld mà bạn chọn lệnh.

1.

1. Tạo Crontab tự động khởi động (bật ) lại MySQL

Khi service MySQL bị stop trên VPS do quá tải hoặc thiếu RAM, ta sẽ dùng lệnh trên để bật lại. Ngoài ra, bạn có thể tạo một crontab tự động check MySQL nếu dịch vụ này đang bị stop thì tự động bật lại.

Trước tiên cần tạo một file đặt tên là auto-start-mysql chẳng hạn, ta đặt file này trong folder root hoặc folder tùy ý bạn chọn. Sau đó chmod file này bằng lệnh:

chmod +x /root/autostartmysql

Để thêm  vào VPS crontab tự động chạy auto-start-mysql 5 phút 1 lần  ta dùng lệnh:

(crontab u root l ; echo “*/5 * * * * /root/auto-start-mysql”) | crontab u root

Nội dung của  file auto-start-mysql  như sau:

Trên VPS Centos

Centos 6:

if [ ! “$(/sbin/service mysql status | awk ‘NR==1 {print $3}’)” == “running” ]; then
service mysql start
/etc/init.d/mysql restart
exit
fi

Centos 7:

MySQL:

if [ ! “$(systemctl status  mysql.service | awk ‘NR==3 {print $2}’)” == “active” ]; then
/bin/systemctl start  mysql.service
exit
fi
MariaDB:
if [ ! “$(/bin/systemctl status  mariadb.service | awk ‘NR==3 {print $2}’)” == “active” ]; then
systemctl start mariadb.service
exit
fi

Trên VPS Ubuntu

MySQL:

if [ ! “$(service mysql status | awk ‘NR==1 {print $2}’)” == “start/running,” ]; then
/etc/init.d/mysql start
exit
fi

MariaDB: