1) Lỗi “MySQL is running but PID file could not be found”
Lỗi trên xảy ra trong khi restart lại mysql, cách khắc phụ lỗi trên như sau:
Tạo thư mục mysql trong /var/run, sau đó tạo file mysql.pid và cấp quyền MySQL cho file trên cho user mysql và khởi động lại dịch vụ mysql.
# mkdir /var/run/mysql # touch /var/run/mysql/mysqld.pid # chown mysql:mysql /var/run/mysql/mysql.pid # service mysql restart
Nếu vẫn xuất hiện lỗi như trên, tiến hành check id của dịch vụ mysql đang chạy, sau đấy kill các dịch vụ mysql ấy đi và restart lại mysql:
# ps aux | grep mysql # kill -9 [id của mysql proccess] # service mysql restart
Sau khi thực hiện các bước trên mà vẫn không được thì có thể nguyên nhân là ổ cứng của server đã bị full và dịch vụ mysql không thể tạo thêm file PID. Bạn có thể dùng câu lệnh ở dưới để kiểm tra thử ổ cứng có bị full không:
# df -h
sau khi biết được ổ cứng đã bị đầy thì bạn nên xóa các file hặc directory không cần thiết đi, sau đấy khởi động lại mysql.
# rm -f [file hặc directory không cần thiết] # service mysql restart
2) Lỗi “MySQL is not running, but lock file (/var/lock/subsys/mysql) exists”.
Lỗi này xảy ra khi bạn restart lại mysql, cách khắc phục là như sau:
Tiến hành check id của dịch vụ mysql đang chạy, sau đấy kill dịch vụ mysql ấy đi và xóa file /var/lock/subsys/mysqld, cuối cùng restart lại mysql:
# ps aux | grep mysql # kill -9 [id của mysql proccess] # rm -f /var/lock/subsys/mysqld # service mysql restart
Sau đó tiến hành truy cập lại mysql và kiểm tra.
# service mysql status
3) Lỗi “Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock”
Lỗi trên là do không thể kết nối đến mysql server thông qua file soket. Cách giải quyết là như sau:
Đầu tiên xem thử file “mysql.sock” trên có tồn tại không, nếu không thì ta có thể dùng câu lệnh sau để tìm file “mysql.sock”.
# ls -la /var/lib/mysql/mysql.sock # find /var/lib/mysql -name mysql.sock
Sau khi tìm được file “mysql.sock”, ta fix lại setting trong file “my.cnf”.
# vi /etc/my.cnf ※Thêm vào dòng sau: socket=/var/lib/mysql/mysql.sock (ở đây ví dụ là file mysql.sock đặt tại folder /var/lib/mysql/)
Tiến hành cấp quyền access cho thư mục, sau đấy test lại status của 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ể tạo symbolic link như sau (ví dụ đường dẫn file “mysql.sock” nằm ở /tmp/mysql):
# mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.org # ln -s /tmp/mysql/mysql.sock /var/lib/mysql/mysql.sock
Sau cùng thì restart lại mysql.
# service mysql restart
Ngoài nguyên nhân trên thì lỗi này còn xuất hiện khi ổ cứng server bị full và mysql demon không thể tạo file mysql.sock được dẫn đến mysql server không thể start và không thể access đến mysql server. Lúc này có thể dùng lệnh df -h để kiểm tra lại dung lượng ổ cứng, nếu ổ cứng bị đầy có thể xóa bớt file không cần thiết đi, sau đấy restart lại mysql.
Hoặc là nguyên nhân của lỗi này còn có thể do memory của server bị đầy hoặc không đủ memory để run dịch vụ mysql, trường hợp này bạn thể tăng memory server bằng cách tạo thêm swap hoặc nâng memory của server lên, hoặc là fix lại thông số của biến innodb_buffer_pool_size trong file my.cnf (giảm bớt giá trị này đi).
4) Lỗi “ERROR 2006 (HY000): MySQL server has gone away”
Lỗi này xảy ra khi ta export/import dữ liệu vào database.
# mysql -u root -p test_db < test_db_dump.sql Enter password: ERROR 2006 (HY000) at line 1: MySQL server has gone away
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 trong file my.cnf, chúng ta có thể fix lỗi này theo các cách sau:
a) Login vào mysql server và run câu lệnh như sau:
# mysql -u root -p -e "set global max_allowed_packet=1073741824;" (102410241024=1073741824 bytes)
b) Hoặc là mở file my.cnf và thêm dòng sau
※hoặc nâng giá trị lên nếu đã có sẵn dòng này, sau đấy khởi động lại mysql server
# vi /etc/my.cnf max_allowed_packet=1024M # service mysql restart
Sau khi import/export xong, bạn có thể xóa hoặc fix lại giá trị của max_allowed_packet cho phù hợp với nhu cầu sử dụng.
c) Hoặc là import/export dữ liệu theo câu lệnh sau
# mysql -u root -p --max_allowed_packet=1073741824 test_db < test_db_dump.sql