Hướng đẫn xử lý lỗi Error Establishing a Database Connection

0
870

Lỗi khi mysql bị quá tải hay bị ngừng hoạt động thường do các lỗi sau:

  1. 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.

Swap chua duoc tao

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:

Kiem tra dung luong trong

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ý.

Tao swap

– Tạo phân vùng swap

mkswap /swapfile

Tao phan vung Swap

– 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

Kiem tra lai Swap

– 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