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) :
Hoặc:
Centos 7:
MySQL:
| systemctl start mysql.service |
MariaDB:
| systemctl start mariadb.service |
Trên VPS Ubuntu
Hoặc
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.
2. 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/auto-start-mysql |
Để 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:
| if [ "$(service mysql status | awk 'NR==1 {print $4}')" == "stopped." ]; then /etc/init.d/mysql start exit fi |
0 Comments