Lỗi khi mysql bị quá tải hay bị ngừng hoạt động thường do các lỗi sau:
- do quá tải Ram, Ram bị thiếu nên mysql bị dừng => cần xử lý tăng ram bằng cách:
a. nâng cấp VPS mua thêm Ram
b.Nếu không muốn nâng cấp VPS thì tạo Swap Ram ảo để hỗ trợ khi quá tải Ram. và cách để tạo Swap thì làm theo hướng dẫn bài này: https://hocvps.com/swap/
Hướng dẫn tạo Swap
Áp dụng được cả trên CentOS và Ubuntu.
1. Kiểm tra swap
Trước khi tiến hành tạo file swap cần kiểm tra xem hiện tại hệ thống đã kích hoạt swap hay chưa bằng cách chạy:
swapon -s
Nếu không có thông tin gì hoặc trả về như hình dưới chứng tỏ server chưa có swap và bạn có thể tạo.
2. Kiểm tra dung lượng trống
Sử dụng lệnh df -h
để kiểm tra dung lượng trống. Còn 13GB, vẫn thoải mái để tạo swap:
3. Tạo swap
– Chạy lệnh dd. Ở đây mình tạo 1GB swap (count=1024k) cho VPS 768MB RAM
sudo dd if=/dev/zero of=/swapfile bs=1024 count=1024k
Lệnh trên sẽ tạo swap có dung lượng 1Gb. Bạn có thể thay count=1024k bằng count=2048k… để tạo swap dung lượng 2Gb. Dung lượng Swap tối đa chỉ nên gấp đôi RAM vật lý.
– Tạo phân vùng swap
mkswap /swapfile
– Kích hoạt swap
swapon /swapfile
Đoạn này có thể gặp thông báo warning insecure permissions 0644, không sao cả bạn cứ bỏ qua. Chúng ta sẽ chỉnh lại ở bước sau.
– Kiểm tra lại tình trạng swap bạn sẽ thấy như sau:
swapon -s
– Thiết lập swap tự động được kích hoạt mỗi khi reboot
echo /swapfile none swap defaults 0 0 >> /etc/fstab
– Bảo mật file swap bằng cách chmod
chown root:root /swapfile chmod 0600 /swapfile
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.
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
Nếu VPS của bạn dùng mysqld thay vì mysql thì thay bằng
if [ ! "$(/sbin/service mysqld status | awk 'NR==1 {print $3}')" == "running" ]; then service mysqld start /etc/init.d/mysqld 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