"Server MySQL telah hilang" ketika mencoba mengimpor file dump besar

11

Saya mencoba mengimpor file dump MySQL.

File itu dibuat di server Linux, saya mencoba mengimpor di windows

Saya masuk ke baris perintah dan berlari:

SOURCE c:/dump.sql

Tapi ini tampaknya telah menimbulkan beberapa masalah set karakter (khusus dengan kutipan cerdas dan tanda baca non standar lainnya).

Disarankan kepada saya bahwa saya menjalankan:

mysql -u username -d dbase < c:\dump.sql

Ketika saya mencoba ini saya mendapatkan kesalahan

ERROR 2006 (HY000) at line 149351: MySQL server has gone away

Sedikit googling menyarankan bahwa ini ada hubungannya dengan sakelar max_allowed_packet tapi saya sudah mencoba ini dan tidak berhasil. Adakah yang tahu apa ini?

Jika ada yang punya saran tentang masalah set karakter yang akan membantu juga.

Jeremy French
sumber
Ada umpan balik? [15 karakter diperlukan untuk memberikan komentar]
Mihai Limbăşan

Jawaban:

23

Insting pertama saya setelah membaca pesan kesalahan dalam judul pertanyaan adalah untuk menyarankan peningkatan max_allowed_packet. Anda menyebutkan bahwa Anda mencoba "saklar itu" dan itu tidak berhasil. Bisakah Anda mengonfirmasi bahwa Anda telah memodifikasi file konfigurasi server dengan benar? Ungkapan Anda membuatnya terdengar seperti Anda telah mencoba menggunakannya sebagai saklar baris perintah pada baris perintah klien mysql.exe, yang tidak akan menyebabkan server mengubah perilaku.

Jadi, singkatnya, apa yang harus Anda coba lakukan adalah mencari dan mengedit file my.cnf yang saat ini digunakan server Anda. Di [mysqld]bagian ubah pengaturan max_allowed_packet ke sesuatu seperti

[mysqld]
max_allowed_packet=32M

Jangan lupa untuk me-restart server setelah mengubah konfigurasi.

Saya telah menggunakan 32M (nilai yang sangat besar) sebagai contoh. Karena kueri Anda sepertinya sangat bagus, Anda harus mencoba nilai ini (atau mungkin bahkan 64 juta jika Anda memiliki cukup RAM) untuk melihat apakah itu berfungsi.

Pilihan lain adalah meninggalkan server apa adanya dan mengubah perilaku klien yang digunakan untuk menghasilkan SQL dump. Katakan untuk membatasi ukuran kueri individual hingga di bawah 1 MB - yang juga harus melakukan trik.

Untuk detail lebih lanjut, lihat B.1.2.10. Paket terlalu besar dalam manual MySQL.

Mihai Limbăşan
sumber
1
Ya saya baru saja mencoba saklar baris perintah. Alasan saya pikir itu berpengaruh adalah bahwa ia memberikan paket max yang diizinkan kesalahan terlalu kecil ketika saya mengaturnya ke sesuatu yang lebih kecil. Saya akan mencoba saran Anda pada hari Senin. Terima kasih
Jeremy French
Sama-sama - saya hampir yakin ini akan berhasil. Sayangnya, seperti banyak (oke, kebanyakan) perangkat lunak lain yang ditulis dalam 50 tahun terakhir, pesan kesalahan MySQL cenderung menyedot dan menyesatkan jika Anda belum terbiasa dengan cara kerja pikiran pengembang :).
Mihai Limbăşan
Senang mendengarnya - bersenang-senanglah.
Mihai Limbăşan
Sangat luar biasa. Saya punya masalah yang sama, datang ke sini untuk bertanya dan bam! terpecahkan. @Mihai - apa pun yang Anda bayar; itu tidak cukup :)
Steven Evers
Solusi ini membantu kami ketika kami mendapatkan kesalahan ini setelah memindahkan MySQL kami dari localhost ke server jauh. Terima kasih banyak!
Lea Cohen
1

Di MySQL 5.7.24, itu karena konfigurasi lama dari MySQL 5.6

sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION. 

Opsi di bawah ini wajib jika versi SQL sama 5.7.5 atau lebih tinggi.

sql_mode=TRADITIONAL

Juga ada dua parameter max_allowed_packet di /etc/my.cnf, yang lainnya adalah untuk mysqldump. Harap perhatikan hal yang sama.

max_allowed_packet = <1G>

Instalasi saya di CentOS7.

Krishna Pandey
sumber
0

Apakah Anda dapat mengakses contoh MySQL di server windows dari kotak linux?

Jika demikian, dapatkah Anda menjalankan perintah pada kotak linux, dengan saklar -h untuk terhubung ke server pada kotak windows?

mysql -u username -d dbase -h <windows host> < dump.sql

Ini dapat menyelesaikan masalah rangkaian karakter Anda , karena Anda menggunakan klien Linux pada kotak asli untuk melakukan impor. (hanya menebak)

Brent
sumber
0

Apa kata log MySQL?

Kadang-kadang kesalahan ini dilaporkan pada klien jika ada kesalahan yang tidak dapat diperbaiki pada server. Ini bisa menjadi indikator kerusakan pada disk dari tabel database.

Dave Cheney
sumber
-1

Apakah akun Anda memiliki kata sandi? Mungkin Anda perlu menambahkan -p switch:

mysql -u username -p -d dbase < c:\dump.sql
Brent
sumber
Oh - mungkin tidak, karena tampaknya cara impor gagal.
Brent