Dưới đây Vietnix sẽ liệt kê các lỗi MySQL thường gặp khi sử dụng MySQL, 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.
Lỗi “mysqld dead but subsys locked” của MySQL
Đâ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.
Xem thêm: Kết nối MySQL với PHP chi tiết và đơn giản
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.
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
>> Xem thêm: Cách xử lý lỗi SQL cannot connect to server
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
Lỗi InnoDB: Error: log file ./ib_logfile0 is of different size
Lỗi này thường xảy ra khi thực hiện converted một database sửu dụng InnoDB sau đó restart MySQL thì báo “fail”. KIểm tra lại log MySQL ghi nhận lỗi có thể như sau:
InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
Giải quyết:
Đầu tiên, bạn cần khôi phục tất cả các thay đổi cấu hình trong file “my.cnf” sau đó khởi động lại MySQL. Tiếp theo, thực hiện câu lệnh dưới đây sau khi bạn truy cập vào MySQL.
#SET GLOBAL innodb_fast_shutdown=0;
Sau đó dừng MySQL:
#service mysql stop
Thay đổi cấu hình tập tin với kích thước file log, trong file my.cfn , sau đó thêm dòng chỉnh sửa kích thước file log nếu có:
innodb_log_file_size = 256M
Tiếp theo, xóa các file log cũ và tiến hành start lại dịch vụ MySQL:
#service mysql start
Lỗi MySQL is running but PID file could not be found
Lỗi này thường xảy ra trong trường hợp restart lại MySQL. Bạn có thể làm theo hướng dẫn dưới đây để khắc phục lỗi.
Giải quyết:
Tạo thư mục trên và tạo file mysql.pid bằng lệnh sau:
#mkdir /var/run/mysql
Sau đó, di chuyển vào thu mục trên và tạo file mysql.pid bằng lệnh:
#cd /var/run/mysql
#touch mysqld.pid
Cấp quyền MySQL cho file trên cho user MySQL:
#chown mysql:mysql mysql.pid
Bây giờ, khởi động lại dịch vụ MySQL:
#service mysql restart
Kiểm tra lại và nếu vẫn phát hiện lỗi thì bạn có thể làm thêm các bước dưới đây:
- Tìm kiếm PID của MySQL đang thực thi trên máy chủ hoặc VPS:
#pidof mysql
- Tiến hành kill hết các processes MySQL đang thực thi bằng câu lệnh sau:
#kill -9 [id-processes-mysql]
Và bâu giờ bạn khởi động lại MySQL lại một lần nữa:
#service mysql restart
Lỗi mySQL error: Got error 28 from table handler
Khi thông báo lỗi này có nghĩa là không gian còn lại trên đĩa cứng đã hết, khiến cho MySQL không thực thi được
Giải quyết:
Điều đầu tiên là bạn cần stop MySQL:
#service mysql stop
Tiến hành thực hiện kiểm tra file hệ thống và các thư mục tạm để giải phóng bớt dung lượng trống.
#df -h
#cd /tmp
#df -h /tmp
Sau khi tiến hành kiểm tra xong, bạn có thể xoá bớt dung lượng trong thư mục tạm để có thể giải phóng bớt dung lượng trống.
#cd /tmp
#rm -rf *
Ngoài ra, bạn có thể làm rỗng các tập tin log như sau:
#echo '' > /var/log/file log
Nếu dung lượng trên máy chủ hoặc VPS không còn nhiều, thì bạn nên tiết hành nâng cấp dịch vụ thêm. Và thực hiện khởi động lại MySQL
Trên đây là tất cả các lỗi MySQL phổ biến mà bạn có thể gặp khi sử dụng MySQL. Mong những cách khắc phục trên sẽ giúp bạn fix lỗi MySQL thành công.