Saya mencoba mengimpor file sql besar melalui phpMyAdmin ... Tetapi tetap menunjukkan kesalahan
'Server MySQL telah pergi'
Apa yang harus dilakukan?
max_allowed_packet
. Agak kasar, tetapi jika berhasil, Anda dapat menemukan nilai waras.
Saya mencoba mengimpor file sql besar melalui phpMyAdmin ... Tetapi tetap menunjukkan kesalahan
'Server MySQL telah pergi'
Apa yang harus dilakukan?
max_allowed_packet
. Agak kasar, tetapi jika berhasil, Anda dapat menemukan nilai waras.
Jawaban:
Seperti yang dinyatakan di sini :
Dua alasan paling umum (dan perbaikan) untuk server MySQL telah hilang (kesalahan 2006) adalah:
Server kehabisan waktu dan menutup koneksi. Bagaimana cara memperbaiki:
periksa variabel wait_timeout di file konfigurasi my.cnf mysqld Anda cukup besar. Pada Debian:,
sudo nano /etc/mysql/my.cnf
setelwait_timeout = 600
detik (Anda dapat mengubah / mengurangi nilai ini saat galat 2006 hilang), lalusudo /etc/init.d/mysql restart
. Saya tidak memeriksa, tetapi nilai default untuk wait_timeout mungkin sekitar 28800 detik (8 jam).Server menjatuhkan paket yang salah atau terlalu besar. Jika mysqld mendapatkan paket yang terlalu besar atau salah, itu mengasumsikan ada sesuatu yang salah dengan klien dan menutup koneksi. Anda dapat meningkatkan batas ukuran paket maksimal dengan meningkatkan nilai max_allowed_packet dalam file my.cnf. Pada Debian:,
sudo nano /etc/mysql/my.cnf
aturmax_allowed_packet = 64M
(Anda dapat mengubah / mengurangi nilai ini saat galat 2006 hilang), lalusudo /etc/init.d/mysql restart
.
Edit:
Perhatikan bahwa file opsi MySQL tidak memiliki perintah mereka sudah tersedia sebagai komentar (seperti di php.ini misalnya). Jadi Anda harus mengetikkan perubahan / Tweak di my.cnf
atau my.ini
dan menempatkan mereka dalam mysql/data
direktori atau di salah satu jalan lain, di bawah kelompok yang tepat pilihan seperti [client]
, [myslqd]
, dll Sebagai contoh:
[mysqld]
wait_timeout = 600
max_allowed_packet = 64M
Kemudian restart server. Untuk mendapatkan nilainya, ketikkan klien mysql:
> select @@wait_timeout;
> select @@max_allowed_packet;
SHOW VARIABLES
query MySQL) dan file yang saya impor memiliki beberapa catatan yang sangat besar. Saya membuka file my.ini (saya menjalankan Windows) dan mengatur nilainya menjadi ini max_allowed_packet = 64M
:, me-restart MySQL dan menjalankan kembali impor.
wait_timeout
garis
Bagi saya solusi ini tidak berhasil, jadi saya mengeksekusi
SET GLOBAL max_allowed_packet=1073741824;
di klien SQL saya.
Jika tidak dapat mengubah ini dengan layanan MYSql berjalan, Anda harus menghentikan layanan dan mengubah variabel dalam file "my.ini".
Sebagai contoh:
max_allowed_packet=20M
php.ini
file (seperti yang disarankan oleh @GBD dalam jawabannya) dan file konfigurasi MySQL my.ini
untuk membuatnya berfungsi.
SHOW variables LIKE 'max_allowed_packet'
max_allowed_packet
dalam satu klien dan kemudian mengimpor .sql
file besar di sesi lain akan berfungsi dengan baik.
Jika Anda bekerja pada XAMPP maka Anda dapat memperbaiki Server MySQL telah pergi masalah dengan perubahan berikut ..
buka file my.ini Anda lokasi my.ini adalah (D: \ xampp \ mysql \ bin \ my.ini)
ubah nilai variabel berikut
max_allowed_packet = 64M
innodb_lock_wait_timeout = 500
Jika Anda menjalankan dengan nilai default maka Anda memiliki banyak ruang untuk mengoptimalkan konfigurasi mysql Anda.
Langkah pertama yang saya rekomendasikan adalah meningkatkan max_allowed_packet menjadi 128 juta.
Kemudian unduh skrip MySQL Tuning Primer dan jalankan. Ini akan memberikan rekomendasi ke beberapa sisi konfigurasi Anda untuk kinerja yang lebih baik.
Lihat juga menyesuaikan nilai batas waktu Anda baik di MySQL dan PHP.
Seberapa besar (ukuran file) file yang Anda impor dan apakah Anda dapat mengimpor file menggunakan klien baris perintah mysql alih-alih PHPMyAdmin?
Jika Anda menggunakan MAMP pada OS X, Anda harus mengubah max_allowed_packet
nilai dalam templat untuk MySQL.
Anda dapat menemukannya di: File> Edit template> MySQL my.cnf
Kemudian cari saja max_allowed_packet
, ubah nilainya dan simpan.
Saya memecahkan masalah saya dengan file /etc/mysql/my.cnf singkat ini:
[mysqld]
wait_timeout = 600
max_allowed_packet = 100M
[mysqld]
Alasan lain ini bisa terjadi adalah kehabisan memori. Periksa / var / log / pesan dan pastikan bahwa my.cnf Anda tidak diatur untuk menyebabkan mysqld mengalokasikan lebih banyak memori daripada yang dimiliki mesin Anda.
Proses mysqld Anda sebenarnya dapat dibunuh oleh kernel dan kemudian dimulai kembali oleh proses "safe_mysqld" tanpa Anda menyadarinya.
Gunakan top dan perhatikan alokasi memori saat sedang berjalan untuk melihat apa ruang kepala Anda.
buat cadangan my.cnf sebelum mengubahnya.
Saya mengalami kesalahan ini dan yang terkait lainnya, ketika saya mengimpor file SQL 16 GB. Bagi saya, mengedit my.ini dan mengatur yang berikut (berdasarkan beberapa posting berbeda) di bagian [mysqld]:
max_allowed_packet = 110M
innodb_buffer_pool_size=511M
innodb_log_file_size=500M
innodb_log_buffer_size = 800M
net_read_timeout = 600
net_write_timeout = 600
Jika Anda menjalankan Windows, buka panel kontrol, layanan, dan lihat detail untuk MySQL dan Anda akan melihat di mana my.ini berada. Kemudian setelah Anda mengedit dan menyimpan my.ini, restart layanan mysql (atau nyalakan kembali komputer).
Jika Anda menggunakan HeidiSQL, Anda juga dapat mengatur beberapa atau semua menggunakan itu.
Saya memperbarui "max_allowed_packet" ke 1024M, tetapi masih tidak berfungsi. Ternyata skrip penerapan saya sedang berjalan:
mysql --max_allowed_packet=512M --database=mydb -u root < .\db\db.sql
Pastikan untuk secara eksplisit menentukan angka yang lebih besar dari baris perintah jika Anda melakukannya dengan cara ini.
Jika data Anda termasuk BLOB
data:
Perhatikan bahwa impor data dari baris perintah tampaknya tersedak pada data BLOB, mengakibatkan kesalahan 'MySQL server telah hilang'.
Untuk menghindari ini, buat ulang mysqldump tetapi dengan --hex-blob
bender:
http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_hex-blob
yang akan menulis file data dengan nilai hex daripada biner di antara teks lainnya.
PhpMyAdmin juga memiliki opsi "Dump binary kolom dalam notasi heksadesimal (misalnya," abc "menjadi 0x616263)" yang berfungsi dengan baik.
Perhatikan bahwa ada bug lama (per Desember 2015) yang berarti GEOM
kolom tidak dikonversi:
Cadangkan tabel dengan kolom GEOMETRI menggunakan mysqldump?
jadi menggunakan program seperti PhpMyAdmin tampaknya menjadi satu-satunya solusi (opsi yang disebutkan di atas tidak benar mengkonversi kolom GEOM).
Jika butuh waktu lama untuk gagal, maka perbesar wait_timeout
variabelnya.
Jika gagal segera, perbesar max_allowed_packet
variabel; itu masih tidak berfungsi, pastikan perintah itu SQL yang valid. Milik saya memiliki kutipan yang tidak terhapus yang mengacaukan semuanya.
Juga, jika memungkinkan, pertimbangkan membatasi jumlah menyisipkan perintah SQL tunggal untuk, katakanlah, 1000. Anda dapat membuat skrip yang membuat beberapa pernyataan dari satu dengan memunculkan kembali bagian INSERT ... setiap n sisipan.
saya mendapat kesalahan yang sama .. untuk menyelesaikan ini buka saja file my.ini..di sini pada baris no 36 ubah nilai ukuran paket maksimum yang diijinkan yaitu. max_allowed_packet = 20M
Saya memiliki kesalahan yang sama hari ini ketika menduplikasi database (server MySQL telah hilang ...), tetapi ketika saya mencoba untuk me-restart mysql.server me-restart saya mendapat kesalahan
ERROR! The server quit without updating PID ...
Inilah cara saya menyelesaikannya: Saya membuka Aplikasi / Utilitas / dan menjalankan Activity Monitor
quit mysqld
kemudian bisa menyelesaikan masalah kesalahan dengan
mysql.server restart
Saya melakukan beberapa perhitungan besar yang melibatkan koneksi mysql agar tetap lama dan dengan data yang banyak. saya menghadapi "masalah pergi Mysql" ini. Jadi saya mencoba t mengoptimalkan query tetapi itu tidak membantu saya maka saya meningkatkan batas variabel mysql yang ditetapkan ke nilai yang lebih rendah secara default.
wait_timeout max_allowed_packet
Untuk membatasi apa yang cocok untuk Anda, itu harus menjadi Nomor Any * 1024 (Bytes). Anda dapat masuk ke terminal menggunakan perintah ' mysql -u username - p ' dan dapat memeriksa dan mengubah batas variabel ini.
Pada akun hosting bersama GoDaddy, sulit untuk mengubah file PHP.ini dll. Namun, ada cara lain dan itu berfungsi dengan baik untuk saya. (Saya baru saja berhasil mengunggah file teks .sql 3,8Mb, berisi 3100 baris dan 145 cols. Menggunakan perintah IMPORT di phpMyAdmin, saya mendapatkan server MySQL yang ditakuti telah hilang. kesalahan, dan tidak ada informasi lebih lanjut.)
Saya menemukan bahwa Matt Butcher memiliki jawaban yang tepat. Seperti Matt, saya telah mencoba segala macam trik, dari mengekspor basis data MySQL dalam ukuran kecil, hingga menulis skrip yang memecah impor besar menjadi lebih kecil. Tapi inilah yang berhasil:
(1) CPANEL ---> FILES (grup) ---> CADANGAN
(2a) Di bawah judul
"Cadangan Sebagian" ... (2b) Di bawah "Unduh Cadangan Database MySQL"
(2c) Pilih basis data Anda dan unduh cadangan (langkah ini opsional, tetapi bijak)
(3a) Langsung ke kanan 2b, di bawah judul "Kembalikan Cadangan Database MySQL"
(3b) Pilih file impor .SQL dari drive lokal Anda
(3c) Kebahagiaan sejati akan menjadi milik Anda (segera ....) Saya butuh waktu sekitar 5 detik
Saya dapat menggunakan metode ini untuk mengimpor satu tabel. Tidak ada hal lain dalam basis data saya yang terpengaruh - tetapi itulah yang harus dilindungi (langkah 2) di atas.
Catatan:
a. Jika Anda tidak yakin cara membuat file impor .SQL, gunakan phpMyAdmin untuk mengekspor tabel dan memodifikasi struktur file itu.
SUMBER: Artikel Matt Butcher 2010
max_allowed_packet
tidak membantu.Saya mendapatkan kesalahan yang sama seperti Anda ketika mengimpor .sql
file ke database saya melalui Sequel Pro.
Kesalahan masih berlanjut setelah menaikkan max_allowed_packet
ke 512M
jadi saya menjalankan impor di baris perintah sebagai gantinya dengan:
mysql --verbose -u root -p DatabaseName < MySQL.sql
Itu memberi kesalahan berikut:
ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled
Saya menemukan beberapa pertanyaan StackOverflow yang membantu:
Dalam kasus saya, .sql
file saya sedikit korup atau semacamnya. Dump MySQL yang kita dapatkan datang dalam dua file zip yang harus digabung bersama dan kemudian dibuka ritsletingnya. Saya pikir unzipping awalnya terganggu, meninggalkan file dengan beberapa karakter aneh dan penyandian. Mendapatkan dump MySQL baru dan membuka ritsletingnya dengan benar bekerja untuk saya.
Hanya ingin menambahkan ini di sini kalau-kalau orang lain yang meningkatkan max_allowed_packet
variabel tidak membantu.
Tidak ada solusi mengenai ukuran paket atau batas waktu yang membuat perbedaan bagi saya. Saya perlu menonaktifkan ssl
mysql -u -p -hmyhost.com --disable-ssl db < file.sql
https://dev.mysql.com/doc/refman/5.7/en/encrypted-connections.html
Saya punya masalah yang sama dengan
$image_base64 = base64_encode(file_get_contents($_FILES['file']['tmp_name']) );
$image = 'data:image/jpeg;base64,'.$image_base64;
$query = "insert into images(image) values('".$image."')";
mysqli_query($con,$query);
Dalam file \ xampp \ mysql \ bin \ my.ini dari phpmyadmin kita hanya dapatkan
[mysqldump]
max_allowed_packet=110M
yang hanya untuk mysqldump -u root -p dbname. Saya menyelesaikan masalah saya dengan mengganti kode di atas dengan
max_allowed_packet=110M
[mysqldump]
max_allowed_packet=110M