Xử lý các lỗi phổ biến trong MySQL

Dưới đây là các lỗi phổ biến trong MySQL mà có thể Quý khách 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 Quý khách 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 status 
 
thì nó hiện ra thông báo lỗi như trên,
 
“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”
 
Đây là mội lỗi trong quá trình làm việc với MySQL export/import dữ liệu .
 
Sự cố này xảy ra với nguyên nhân chủ yêu là 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.
 
Nếu bị lỗi này, Quý khách vui lòng làm theo hướng dẫn sau để có thể fix lỗi:
 
Giải quyết:
 
Mở file cấu hình my.cnf của MySQL ( nếu không nhớ đường dẫn file cấu hình có thể dùng lệnh #find / -name my.cnf để tìm kím).
 
Thêm dòng sau (hoặc nâng cao mức cho phép lên nếu đã có dòng này trong file my.cnf)
 
max_allowed_packet=500M
 
Sau khi tiến hành thêm xong, khởi động lại MySQL bằng câu lệnh sau:
 
#service mysql restart
 
Sau khi import/export thành công, Quý khách có thể vào lại file my.cnf để xóa hoặc hạ thấp mức giới hạn xuống cho phù hợp nhu cầu sử dụng.
 
3. Lỗi “InnoDB: Error: log file ./ib_logfile0 is of different size”
 
Lỗi này xảy ra có thể khi thực hiện việc converted một database nào đó sử dụng InnoDB sau đó restart MySQL thì báo fail, kiểm tra log MySQL ghi nhận lỗi, ví dụ như sau:
 
“InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes”
 
Giải quyết:
 
Đầu tiên Quý khách vui lòng phục hồi tất cả các thay đổi cấu hình trong file “my.cnf” sau đó start lại MySQL.
 
Tiếp theo, thực hiện câu lệnh dưới đây sau khi thực hiện việc truy cập vào MySQL.
 
#SET GLOBAL innodb_fast_shutdown=0;
 
Sau đó stop MySQL.
 
#service mysql stop
 
Thay đổi cấu hình tập tin với kích thước file log, trong file my.cnf ta thêm dòng hay chỉnh sửa lại giá trị kích thước file log nếu có:
 
innodb_log_file_size  = 256M
 
Tiến hành xoá các file log cũ (ví dụ như: ib_logfile0 và ib_logfile1)
 
Sau đó tiến hành start lại dịch vụ MySQL:
 
#service mysql start
 
4. Lỗi “MySQL is running but PID file could not be found”
 
Lỗi trên xảy ra trong trường hợp thực hiện việc restart lại dịch vụ MySQL.
 
Để khắc phụ tình trạng lỗi trên, Quý khách vui lòng làm theo hướng dẫn sau:
 
Giải quyết:
 
Tạo thư mục mysql trong /var/run bằng lệnh sau:
 
#mkdir /var/run/mysql

 
Sau đó di chuyển vào thư mục trên và tạo file mysql.pid bằng lệnh sau:
 
#cd /var/run/mysql
#touch mysqld.pid
 
Cấp quyền MySQL cho file trên cho user mysql:
 
#chown mysql:mysql mysql.pid
 
Tiến hành khởi động lại MySQL service:
 
#service mysql restart
 
Nếu vẫn xuất hiện lỗi như trên, xin Quý khách vui lòng làm theo các bước dưới đây để quá trình fix lỗi được hoàn tất.
 
Tiếp theo, tìm kím cái 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]
 
Tiến hành khởi động lại MySQL service một lần nữa:
 
#service mysql restart

 

Sau đó tiến hành kiểm tra lại. 
 
5. Lỗi “Unable to connect to database: Too many connections”.
 
Khi xuất hiện lỗi trên có nghĩa là Quý khác 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:

Để giải quyết lỗi trên, Quý khách có làm theo các bước dưới đây để có thể tăng các thông số giới hạn:
 
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 = 1024; ( giá trị không nên lớn quá, vì còn tuỳ thuộc nhiều vào hệ thống của Quý khách)
 
Ngoài ra, cần tăng thêm giá trị sau:
 
max_user_connections = 20;
 

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
 
6. 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 soket nằm tại đường dẫn trên.
 
Giải quyết:

Quý khách có thể tham khảo hướng dẫn sau đây để có thể fix được lỗi trên.
 
Bước đầu tiên xác định được tập tin “mysql.sock” có trong đường dẫn /var/lib/mysql/ hay không bằng cách truy cập vào đường dẫn và thực hiện câu lệnh ls -l
 
#cd /var/lib/mysql
#ls -l
 
Nếu như không có thì ta tiến hành 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 chmod thư mục 
 
chmod -R 777 /var/lib/mysql/
 
Thực hiện lại việc kiểm tra trạng thái 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, Quý khách 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)
 
Tiến hành restart lại dịch vụ mysql.
 
#service mysql restart
 

7. Lỗi “mySQL error: Got error 28 from table handler. “
 
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ể thực thi được.
 
Giải quyết:
 
Đầu tiên tiến hành stop dịch vụ mysql.

 
#service mysql stop
 
Tiến hành kiểm tra file hệ thống và các thư mục tạm.
 
#df -h 
#cd /tmp
#df -h /tmp
 
Sau khi tiến hành kiểm tra xong, Quý khách 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, Quý khách có thể làm rỗng các tập tin ghi log.
 
#echo ” > /var/log/file log
 
Nếu như dung lượng ổ cứng trên VPS hay máy chủ, Quý khách nên tính đến việc nâng cấp thêm.
 
Sau khi thực hiện các bước trên, hãy khởi động lại dịch vụ MySQL.
 

#service mysql start
 

https://vinahost.vn