Secara umum kesalahan:
Kesalahan: 2006 ( CR_SERVER_GONE_ERROR
) - Server MySQL telah hilang
berarti klien tidak dapat mengirim pertanyaan ke server .
mysql
impor
Dalam kasus spesifik Anda saat mengimpor file database melalui mysql
, ini kemungkinan besar berarti bahwa beberapa permintaan dalam file SQL terlalu besar untuk diimpor dan mereka tidak dapat dieksekusi di server, oleh karena itu klien gagal pada kesalahan yang terjadi pertama kali.
Jadi, Anda memiliki kemungkinan berikut:
Tambahkan opsi paksaan ( -f
) untuk mysql
melanjutkan dan menjalankan sisa kueri.
Ini berguna jika database memiliki beberapa permintaan besar terkait dengan cache yang tidak relevan.
Tingkatkan max_allowed_packet
danwait_timeout
dalam konfigurasi server Anda (mis ~/.my.cnf
.).
Buang database menggunakan --skip-extended-insert
opsi untuk memecah pertanyaan besar. Kemudian impor lagi.
Coba terapkan --max-allowed-packet
opsi untuk mysql
.
Alasan umum
Secara umum kesalahan ini dapat berarti beberapa hal, seperti:
kueri ke server salah atau terlalu besar,
Solusi: Tingkatkan max_allowed_packet
variabel .
Pastikan variabel berada di bawah [mysqld]
bagian, bukan [mysql]
.
Jangan takut menggunakan angka besar untuk pengujian (seperti 1G
).
Jangan lupa untuk me-restart server MySQL / MariaDB.
Periksa kembali nilai yang ditetapkan dengan benar:
mysql -sve "SELECT @@max_allowed_packet" # or:
mysql -sve "SHOW VARIABLES LIKE 'max_allowed_packet'"
Anda mendapat batas waktu dari koneksi TCP / IP di sisi klien.
Solusi: Tingkatkan wait_timeout
variabel .
Anda mencoba menjalankan kueri setelah koneksi ke server ditutup.
Solusi: Kesalahan logika dalam aplikasi harus diperbaiki.
Pencarian nama host gagal (misalnya masalah server DNS), atau server sudah mulai dengan --skip-networking
opsi.
Kemungkinan lain adalah bahwa firewall Anda memblokir port MySQL (misalnya, 3306 secara default).
Utas yang berjalan telah terbunuh, jadi coba lagi.
Anda telah menemukan bug di mana server mati saat menjalankan kueri.
Klien yang menjalankan host yang berbeda tidak memiliki hak istimewa yang diperlukan untuk terhubung.
Dan masih banyak lagi, jadi pelajari lebih lanjut di: B.5.2.9 Server MySQL telah hilang .
Debugging
Berikut adalah beberapa ide debug tingkat ahli:
Periksa log, mis
sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")
Uji koneksi Anda melalui mysql
, telnet
atau fungsi ping (mis. mysql_ping
Dalam PHP).
Gunakan tcpdump
untuk mengendus komunikasi MySQL (tidak akan berfungsi untuk koneksi soket), misalnya:
sudo tcpdump -i lo0 -s 1500 -nl -w- port mysql | strings
Di Linux, gunakan strace
. Pada BSD / Mac gunakan dtrace
/ dtruss
, mis
sudo dtruss -a -fn mysqld 2>&1
Lihat: Memulai dengan DTracing MySQL
Pelajari selengkapnya cara men-debug server atau klien MySQL di: 26.5 Debugging dan Porting MySQL .
Untuk referensi, periksa kode sumber dalam sql-common/client.c
file yang bertanggung jawab untuk melemparkan CR_SERVER_GONE_ERROR
kesalahan untuk perintah klien.
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;
}