Cách fix các lỗi thường gặp trong MySQL!!!

mysql-logo

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です