
Trong quá trình import database, có thể bạn sẽ gặp phải lỗi “MySQL server has gone away”. Vậy nguyên nhân dẫn đến tình trạng trên là gì, có những cách nào để khắc phục. Cùng giải quyết những vấn đề này trong bài viết sau đây.
1. 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.
Server ngừng vì packet không chính xác hoặc quá lớn. Nếu mysqld nhận được lệnh import một packet chứa SQL-statement dung lượng không chính xác hoặc vượt quá qui định: max_allowed_packet, nó sẽ giả định rằng đã xảy ra sự cố và tự động ngắt kết nối.
2. Fix lỗi “MySQL server has gone away”
Tương ứng với mỗi nguyên nhân phát sinh lỗi, sẽ có giải pháp khắc phục cụ thể như sau:
Đố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.
Đố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, sau đó khởi động lại máy chủ MySQL của bạn: sudo /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 này vào MySQL thì gặp phải lỗi như trên. Bạn có thể tăng giá trị lên mức 32MB và set biến GLOBAL max_allowed_packet với giá trị là: 32 × 1024 × 1024 = 33554432. Với cách này bạn sẽ không phải khởi động lại mysql.
Sau khi set giá trị thỏa đáng, bạn tiến hành import lại.
Bạn muốn giữ giá trị mặc định khi import thì thiết lập cấu hình trong tệp /etc/my.cnf rồi khởi động lại mysql là được.