Dưới đây là các lỗi phổ biến trong MySQL mà các bạn có thể sẽ gặp phải trong quá trình sử dụng, bài viết sau đây có thể giúp ích cho các bạn trong việc fix các lỗi liên quan đến MySQL.


1. Lỗi “mysqld dead but subsys locked”

– Đây là trường hợp mysql bị lỗi không thể restart khi thực hiện câu lệnh

#service mysqld restart
-> xuất ra kết quả: mysqld dead but subsys locked

Giải quyết:

– Copy file đang bị khoá vào thư mục /root: cp /var/lock/subsys/mysql /root/mysqld
– Sau đó xoá tiến trình mysql đang bị khoá này đi, ta thực hiện câu lệnh sau: rm -f /var/lock/subsys/mysqld
– Thực hiện tắt các dịch vụ liên quan sau đó restart lại:

#service httpd stop
#service mysql restart
#service httpd restart

– Sau đó tiến hành truy cập lại mysql và kiểm tra, các câu lệnh trên được sử dụng trên hệ thống CentOS 6.x trở lên.

2. Lỗi “ERROR 2006 (HY000): MySQL server has gone away”

Nguyên nhân:

MySQL server has gone away (lỗi 2006) có hai nguyên nhân chính như sau:
[+] Server đã hết thời gian chờ và đóng kết nối.
[+] Do dung lượng của cơ sở dữ liệu database quá lớn, vượt mức quy định cấu hình trong MySQL.

Giải quyết:

– Đối với lỗi server timed out – hết thời gian chờ, để khắc phục, hãy kiểm tra biến mysql wait_timeout trong tệp cấu hình my.cnf của bạn đã đủ lớn chưa, nếu chưa hãy tăng thời gian chờ lên.

wait_timeout=300
interactive_timeout=300

– Đối với lỗi dung lượng packet vượt quá dung lượng, cách khắc phục như sau: bạn có thể tăng giới hạn kích thước packet của biến max_allowed_packet trong tệp my.cnf lên mức tối đa.

Ví dụ: đặt max_allowed_packet = 128M
Khởi động lại máy chủ MySQL: /etc/init.d/mysql restart

– Hoặc trong trường hợp bạn muốn tăng lên một mức cụ thể nào đó lớn hơn dung lượng packet đang import thì có thể set theo giá trị đó.

Ví dụ: bạn có database với dung lượng file 20MB và khi import database vào MySQL thì gặp phải lỗi như trên, tăng giá trị lên mức 32MB và set max_allowed_packet với giá trị là: 32 x 1024 x 1024 = 33554432. Với cách này bạn không phải khởi động lại mysql.

3. Lỗi “Unable to connect to database: Too many connections”

– Khi xuất hiện lỗi trên có nghĩa là bạn không thể truy cập vào cơ sở dữ liệu bởi vì số lần truy cập đã quá giới hạn của server.

Giải quyết:

– Sau khi truy cập vào VPS, tiến hành mở file my.cnf: vi /etc/my.cnf
– Sau đó thêm dòng sau vào: max_connections = 300; (giá trị không nên lớn quá, vì còn tuỳ thuộc nhiều vào hệ thống trên dịch vụ)
– Ngoài ra, cần tăng thêm giá trị sau: max_user_connections = 20; (giá trị có thể tăng lên nếu cần thiết)
– Sau khi thực hiện thêm 2 dòng trên vào file cấu hình, ta tiến hành restart lại dịch vụ mysql: service mysql restart

4. Lỗi “Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock”

– Lỗi trên nguyên nhân là do không thể kết nối đến MySQL server thông qua socket nằm tại đường dẫn trên.

Giải quyết:

– Bước đầu tiên xác định được tập tin mysql.sock bằng cách sử dụng câu lệnh sau để tìm kiếm file mysql.sock: find / -name mysql.sock
– Sau khi tiến hành xác định được tập tin mysql.sock, ta tiến hành chỉnh sửa thông số lại trong file my.cnf: vi /etc/my.cnf

-> Thêm dòng sau vào:

socket=/var/lib/mysql/mysql.sock (ví dụ: file mysql.sock đặt tại đường dẫn /var/lib/mysql/)

– Tiến hành phân quyền thư mục và kiểm tra trạng thái Mysql:

#chmod -R 777 /var/lib/mysql/
#mysqladmin -u root -p status

– Ngoài ra, nếu như đường dẫn file mysql.sock nằm ở đường dẫn khác, các bạn có thể thực hiện các thao tác như sau:

#mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bk
#ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock (ví dụ đường dẫn file mysql.sock nằm ở /data/mysql_datadir)
#service mysql restart
  • Chúc các bạn thực hiện thành công!

Leave a Reply

Your email address will not be published. Required fields are marked *