Saya mendapatkan kesalahan ini ketika saya mencoba untuk sumber file SQL yang besar ( INSERT
permintaan besar ).
mysql> source file.sql
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 2
Current database: *** NONE ***
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 3
Current database: *** NONE ***
Tidak ada dalam tabel yang diperbarui. Saya sudah mencoba menghapus dan menghapus tabel / database, serta me-restart MySQL. Tak satu pun dari hal-hal ini menyelesaikan masalah.
Ini ukuran maksimum paket saya:
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
Ini ukuran file:
$ ls -s file.sql
79512 file.sql
Ketika saya mencoba metode lain ...
$ ./mysql -u root -p my_db < file.sql
Enter password:
ERROR 2006 (HY000) at line 1: MySQL server has gone away
Jawaban:
Menambahkan baris ini ke dalam
my.cnf
file memecahkan masalah saya.Ini berguna ketika kolom memiliki nilai besar, yang menyebabkan masalah, Anda dapat menemukan penjelasannya di sini .
sumber
set global max_allowed_packet=64*1024*1024;
- tidak memerlukan restart MySQL jugasudo service mysql restart
agar perubahan pada file my.cnf mulai berlaku.Anda dapat meningkatkan Paket Max Diizinkan
http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_max_allowed_packet
sumber
Pembaruan global dan pengaturan my.cnf tidak berfungsi untuk saya karena beberapa alasan. Memberikan
max_allowed_packet
nilai secara langsung ke klien berfungsi di sini:sumber
--max_allowed_packet
hanya memengaruhi klien. Pertimbangkan memodifikasi server mysql (mysqld) serta dengan mengeditmax_allowed_packet
di/etc/my.cnf
berkas dan restart server mysql Anda.Secara umum kesalahan:
berarti klien tidak dapat mengirim pertanyaan ke server .
mysql
imporDalam 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
) untukmysql
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 untukmysql
.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:
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
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:Di Linux, gunakan
strace
. Pada BSD / Mac gunakandtrace
/dtruss
, misLihat: 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 melemparkanCR_SERVER_GONE_ERROR
kesalahan untuk perintah klien.sumber
Untuk jaga-jaga, untuk memeriksa variabel yang dapat Anda gunakan
Ini akan menampilkan variabel saat ini, dalam hal ini max_allowed_packet, dan seperti seseorang mengatakan dalam jawaban lain Anda dapat mengaturnya sementara dengan
Dalam kasus saya file cnf tidak diperhitungkan dan saya tidak tahu mengapa, jadi kode SET GLOBAL sangat membantu.
sumber
Saya memecahkan kesalahan
ERROR 2006 (HY000) at line 97: MySQL server has gone away
dan berhasil memigrasi file> 5GB sql dengan melakukan dua langkah ini secara berurutan:Dibuat /etc/my.cnf seperti yang direkomendasikan orang lain, dengan konten berikut:
Menambahkan bendera
--force --wait --reconnect
ke perintah (yaitumysql -u root -p -h localhost my_db < file.sql --verbose --force --wait --reconnect
).Catatan Penting: Itu perlu untuk melakukan kedua langkah, karena jika saya tidak repot-repot melakukan perubahan pada file /etc/my.cnf serta menambahkan flag-flag itu, beberapa tabel hilang setelah impor.
Sistem yang digunakan: OSX El Capitan 10.11.5; mysql Ver 14.14 Distrib 5.5.51 untuk osx10.8 (i386)
sumber
my.cnf
, Anda harus memulai kembali layanan mysql Anda.Saya memiliki masalah yang sama tetapi mengubah max_allowed_packet di file my.ini / my.cnf di bawah [mysqld] membuat trik.
tambahkan satu baris
sekarang restart layanan MySQL setelah Anda selesai.
sumber
Anda juga dapat masuk ke database sebagai root (atau hak istimewa SUPER) dan lakukan
tidak memerlukan restart MySQL juga. Perhatikan bahwa Anda harus memperbaiki
my.cnf
file Anda sebagaimana diuraikan dalam solusi lain:Dan konfirmasikan perubahan setelah me-restart MySQL:
Anda dapat menggunakan baris perintah juga, tetapi itu mungkin memerlukan pembaruan skrip start / stop yang mungkin tidak selamat dari pembaruan dan tambalan sistem.
Seperti yang diminta, saya menambahkan jawaban saya sendiri di sini. Senang melihatnya bekerja!
sumber
Solusinya adalah meningkatkan nilai yang diberikan
wait_timeout
danconnect_timeout
parameter dalam file opsi Anda, di bawah[mysqld]
tag.Saya harus memulihkan cadangan mysql 400MB dan ini berhasil untuk saya (nilai yang saya gunakan di bawah agak berlebihan, tetapi Anda mengerti maksudnya):
sumber
Beberapa hal bisa terjadi di sini;
INSERT
berjalan lama, dan klien terputus. Ketika terhubung kembali itu tidak memilih database, maka kesalahan. Satu opsi di sini adalah menjalankan file batch Anda dari baris perintah, dan pilih database dalam argumen, seperti itu;php
atau bahasa lain. Setelah setiap pernyataan yang berjalan lama, Anda dapat menutup dan membuka kembali koneksi, memastikan bahwa Anda terhubung pada awal setiap permintaan.sumber
source
perintahJika Anda menggunakan Mac dan menginstal mysql melalui minuman seperti saya, berikut ini berfungsi.
cp $(brew --prefix mysql)/support-files/my-default.cnf /usr/local/etc/my.cnf
Sumber: Untuk pemasangan mysql homebrew, di mana my.cnf?
tambahkan
max_allowed_packet=1073741824
ke/usr/local/etc/my.cnf
mysql.server restart
sumber
Saya mengalami kesalahan ini ketika saya menggunakan Mysql Cluster, saya tidak tahu pertanyaan ini dari penggunaan cluster atau tidak. Karena kesalahannya persis sama, maka berikan solusi saya di sini. Mendapatkan kesalahan ini karena node data tiba-tiba macet. Tetapi ketika node crash, Anda masih bisa mendapatkan hasil yang benar menggunakan cmd:
Dan mysqld juga berfungsi dengan benar. Jadi pada awalnya, saya tidak bisa mengerti apa yang salah. Dan sekitar 5 menit kemudian, hasil ndb_mgm tidak menunjukkan node data berfungsi. Lalu saya menyadari masalahnya. Jadi, cobalah untuk me-restart semua node data, maka server mysql kembali dan semuanya OK.
Tapi satu hal yang aneh bagi saya, setelah saya kehilangan server mysql untuk beberapa pertanyaan, ketika saya menggunakan cmd suka
show tables
, saya masih bisa mendapatkan info pengembalian seperti33 rows in set (5.57 sec)
, tetapi tidak ada info tabel yang ditampilkan.sumber
Untuk amazon RDS (ini kasus saya), Anda dapat mengubah nilai
max_allowed_packet
parameter ke nilai numerik dalam byte yang masuk akal untuk data terbesar dalam setiap insert yang mungkin Anda miliki (misalnya: jika Anda memiliki beberapa nilai gumpalan 50mb di insert Anda, aturmax_allowed_packet
ke 64M = 67108864), dalam yang baru atau yang sudah adaparameter-group
. Kemudian terapkan grup-parameter itu ke instance MySQL Anda (mungkin perlu me-reboot instance itu).sumber
max_allowed_packet parameter
dan atur ke ukuran yang sesuai (atau jika Anda memiliki gumpalan besar, atur ke nilai maks 1073741824 ) itu harus bekerja.Jika menghubungkan kembali dan mendapatkan ID koneksi 2, server hampir pasti baru saja macet.
Hubungi admin server dan minta mereka untuk mendiagnosis masalahnya. Tidak ada SQL yang tidak berbahaya yang dapat menyebabkan crash server, dan output dari mysqldump tentu tidak seharusnya.
Mungkin itu terjadi bahwa admin server telah membuat beberapa kesalahan operasional besar seperti menetapkan ukuran buffer lebih besar dari batas ruang alamat arsitektur, atau lebih dari kapasitas memori virtual. Log kesalahan MySQL mungkin akan memiliki beberapa informasi yang relevan; mereka akan memantau ini jika mereka kompeten.
sumber
Ini lebih merupakan masalah yang jarang terjadi tetapi saya telah melihat ini jika seseorang telah menyalin seluruh direktori / var / lib / mysql sebagai cara untuk memigrasi DB mereka ke server lain. Alasan tidak berfungsi adalah karena database sedang berjalan dan menggunakan file log. Kadang tidak berfungsi jika ada log di / var / log / mysql. Solusinya adalah menyalin file / var / log / mysql juga.
sumber
Untuk pengguna Drupal 8 mencari solusi untuk kegagalan impor DB:
Pada akhir file dump sql ada perintah dapat memasukkan data ke tabel "webprofiler". Itu saya kira beberapa file log debug dan tidak terlalu penting bagi situs untuk bekerja sehingga semua ini dapat dihapus. Saya menghapus semua sisipan tersebut termasuk LOCK TABLES dan UNLOCK TABLES (dan semuanya di antaranya). Ini di bagian paling bawah dari file sql. Masalahnya dijelaskan di sini:
https://www.drupal.org/project/devel/issues/2723437
Tetapi tidak ada solusi untuk itu selain memotong meja itu.
BTW saya mencoba semua solusi dari jawaban di atas dan tidak ada yang membantu.
sumber
Saya sudah mencoba semua solusi di atas, semuanya gagal.
Saya berakhir dengan menggunakan
-h 127.0.0.1
alih-alih menggunakan defaultvar/run/mysqld/mysqld.sock
.sumber
Pesan kesalahan ini juga terjadi ketika Anda membuat SCHEMA dengan COLLATION berbeda dari yang digunakan dalam dump. Jadi, jika dump berisi
Anda juga harus merefleksikannya dalam susunan SCHEMA:
Saya telah menggunakan utf8mb4_general_ci dalam skema, karena skrip saya berasal dari instalasi V8 baru, sekarang memuat DB pada 5.7 yang lama crash dan membuat saya hampir gila.
Jadi, mungkin ini membantu Anda menghemat waktu yang menyebalkan ... :-)
(MacOS 10.3, mysql 5.7)
sumber
jika tidak ada jawaban yang menyelesaikan masalah Anda, saya menyelesaikannya dengan menghapus tabel dan membuatnya lagi secara otomatis dengan cara ini:
kemudian gunakan saja cadangan ini dengan db Anda dan itu akan menghapus dan membuat ulang tabel yang Anda butuhkan.
Kemudian Anda hanya mencadangkan data, dan melakukan hal yang sama, dan itu akan berhasil.
sumber
Bagaimana kalau menggunakan klien mysql seperti ini:
sumber