Nói chung là lỗi:
Lỗi: 2006 ( CR_SERVER_GONE_ERROR
) - Máy chủ MySQL đã biến mất
có nghĩa là khách hàng không thể gửi câu hỏi đến máy chủ .
mysql
nhập khẩu
Trong trường hợp cụ thể của bạn trong khi nhập tệp cơ sở dữ liệu qua mysql
, điều này rất có thể có nghĩa là một số truy vấn trong tệp SQL quá lớn để nhập và chúng không thể được thực thi trên máy chủ, do đó máy khách bị lỗi trong lần xảy ra lỗi đầu tiên.
Vì vậy, bạn có những khả năng sau đây:
Thêm tùy chọn bắt buộc ( -f
) mysql
để tiến hành và thực hiện phần còn lại của các truy vấn.
Điều này hữu ích nếu cơ sở dữ liệu có một số truy vấn lớn liên quan đến bộ đệm mà không liên quan.
Tăng max_allowed_packet
vàwait_timeout
trong cấu hình máy chủ của bạn (ví dụ ~/.my.cnf
).
Kết xuất cơ sở dữ liệu bằng cách sử dụng --skip-extended-insert
tùy chọn để phá vỡ các truy vấn lớn. Sau đó nhập lại.
Hãy thử áp dụng --max-allowed-packet
tùy chọn cho mysql
.
Lý do phổ biến
Nói chung, lỗi này có thể có nghĩa là một số điều, chẳng hạn như:
một truy vấn đến máy chủ không chính xác hoặc quá lớn,
Giải pháp: Tăng max_allowed_packet
biến .
Hãy chắc chắn rằng biến nằm dưới [mysqld]
phần, không [mysql]
.
Đừng ngại sử dụng số lượng lớn để thử nghiệm (như 1G
).
Đừng quên khởi động lại máy chủ MySQL / MariaDB.
Kiểm tra kỹ giá trị được đặt đúng bằng cách:
mysql -sve "SELECT @@max_allowed_packet" # or:
mysql -sve "SHOW VARIABLES LIKE 'max_allowed_packet'"
Bạn đã hết thời gian chờ từ kết nối TCP / IP ở phía máy khách.
Giải pháp: Tăng wait_timeout
biến .
Bạn đã cố chạy một truy vấn sau khi kết nối với máy chủ đã bị đóng.
Giải pháp: Một lỗi logic trong ứng dụng nên được sửa chữa.
Tra cứu tên máy chủ không thành công (ví dụ: sự cố máy chủ DNS) hoặc máy chủ đã được bắt đầu với --skip-networking
tùy chọn.
Một khả năng khác là tường lửa của bạn chặn cổng MySQL (ví dụ 3306 theo mặc định).
Các chủ đề đang chạy đã bị giết, vì vậy hãy thử lại.
Bạn đã gặp một lỗi trong đó máy chủ đã chết trong khi thực hiện truy vấn.
Một máy khách đang chạy trên một máy chủ khác không có các đặc quyền cần thiết để kết nối.
Và nhiều hơn nữa, vì vậy hãy tìm hiểu thêm tại: B.5.2.9 Máy chủ MySQL đã biến mất .
Gỡ lỗi
Dưới đây là một vài ý tưởng gỡ lỗi cấp chuyên gia:
Kiểm tra nhật ký, vd
sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")
Kiểm tra kết nối của bạn thông qua mysql
, telnet
hoặc các chức năng ping (ví dụ mysql_ping
trong PHP).
Sử dụng tcpdump
để đánh hơi giao tiếp MySQL (sẽ không hoạt động đối với kết nối ổ cắm), ví dụ:
sudo tcpdump -i lo0 -s 1500 -nl -w- port mysql | strings
Trên Linux, sử dụng strace
. Trên BSD / Mac, hãy sử dụng dtrace
/ dtruss
, vd
sudo dtruss -a -fn mysqld 2>&1
Xem: Bắt đầu với DTracing MySQL
Tìm hiểu thêm về cách gỡ lỗi máy chủ hoặc máy khách MySQL tại: 26.5 Gỡ lỗi và chuyển MySQL .
Để tham khảo, hãy kiểm tra mã nguồn trong sql-common/client.c
tệp chịu trách nhiệm ném CR_SERVER_GONE_ERROR
lỗi cho lệnh máy khách.
MYSQL_TRACE(SEND_COMMAND, mysql, (command, header_length, arg_length, header, arg));
if (net_write_command(net,(uchar) command, header, header_length,
arg, arg_length))
{
set_mysql_error(mysql, CR_SERVER_GONE_ERROR, unknown_sqlstate);
goto end;
}