Kesalahan mysqldump 2013

18

Saya memiliki basis data yang terinstal, yang ingin saya backup di mysql. Masalahnya adalah mysqldumpgagal mengekspor tabel 'maia_mail'

# mysqldump -u root -p maia > maia.sql
mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `maia_mail` at row: 15

Ini berjalan kurang dari 30 detik dan mendapatkan kesalahan seperti di atas.

Ukuran total DB adalah 1,3GB dengan tabel maia_mail 1,0GB

Di my.cnfsaya punya set ini:

[mysqld]
max_allowed_packet      = 1300M
[mysqldump]
max_allowed_packet      = 1300M

Mohon saran atau berikan panduan tentang cara membuang database?

Garfink
sumber
Ruang kosong 170GB. Itu juga sama apakah saya membuang ke mesin db aktif atau jauh
garfink
salinan email sehingga data varchar utamanya
garfink
1300M adalah perubahan baru-baru ini, masalahnya ada ketika diatur ke standar 16M juga. Server juga telah dimulai kembali setelah perubahan ke 1300M.
garfink
Saya mengatur kembali ke standar 16M. dump menghasilkan kesalahan yang sama 2013 pada baris 15
garfink

Jawaban:

13

Saya bisa dengan mudah menyarankan untuk mengubah pengaturan InnoDB yang mungkin sedikit tangan hanya untuk mendapatkan mysqldump untuk bekerja. Anda mungkin tidak menyukai apa yang saya sarankan, tetapi saya percaya itu pilihan terbaik Anda (hanya). Ini dia:

SARAN # 1: Nonaktifkan sisipan yang diperluas

Pengaturan default untuk mysqldump akan mencakup penggabungan bersama ratusan atau ribuan baris dalam satu INSERT. Ini dikenal sebagai INSERT yang diperluas. Hal ini menyebabkan beberapa overrun sekedar max_allowed_packet .

Saya menjawab posting kembali Sep 01, 2011( server MySQL telah pergi menghalangi impor dump besar ) di mana saya membahas melakukan hal yang sama untuk mengimpor mysqldump besar. Saya percaya menonaktifkan INSERT yang diperluas akan membantu menciptakan mysqldump yang merepotkan juga.

mysqldump -u root --skip-extended-insert -p maia > maia.sql

Berita buruk: Apa yang dilakukan ini dalam membuat perintah INSERT untuk setiap baris. Ini pasti akan menambah waktu yang diperlukan untuk melakukan mysqldump. Akibatnya, itu juga akan meningkat ke waktu yang diperlukan untuk memuat ulang (mungkin dengan faktor 10-100).

Saya sudah membahas skip-extended-insertsebelumnya

SARAN # 2: Buang data biner sebagai hex (OPTIONAL)

Untuk membuat data biner mysqldump lebih portabel, buang data tersebut dalam heksadesimal

mysqldump -u root --skip-extended-insert --hex-blob -p maia > maia.sql

Berita Buruk: Ini akan menggembungkan mysqldump sedikit lagi

COBALAH !!!

Catatan Sisi: Ukuran maksimum max_allowed_packet adalah 1G

RolandoMySQLDBA
sumber
5

Saya juga mendapatkan kesalahan yang sama ketika mencoba untuk membuang basis data 12 GB. Saya melakukan perubahan berikut untuk membuatnya berfungsi.

  1. max_allowed_packet dikonfigurasi ke 1024M
  2. mengkonfigurasi net_read_timeout ke 7200
  3. mengkonfigurasi net_write_timeout ke 7200

Catatan: Saya tahu nilai batas waktu terlalu tinggi (7200 detik yaitu 20 jam). Tetapi saya melakukannya secara itorisal hanya untuk menyingkirkan kemungkinan apa pun. Saya sedang dalam proses menemukan nilai batas waktu yang optimal.

gadha nyata
sumber
2
Untuk pengguna lain: ini diatur di server, bukan di file konfigurasi mysqldump. Juga, 7200 detik adalah 2 jam, bukan 20
Mark
atur global net_read_timeout = 120; atur global net_write_timeout = 900; bekerja untuk saya
kasi
2

Cukup sertakan berikut ini di file konfigurasi my.ini (Windows) atau my.cnf (Linux) Anda.

[mysqld]
max_allowed_packet=1024M 

[mysqldump]
max_allowed_packet=1024M 
net_read_timeout=3600 
net_write_timeout=3600
Jesus Uzcanga
sumber
2
Bagian harus sebaliknya.
Stop Harming Monica
1

Pastikan Anda memiliki cukup memori untuk dibuang. Silakan terus memeriksa memori saat mengambil dump, mis. Menggunakan perintah seperti ini:

free -mt

Jika Anda kehabisan memori saat mengambil dump Anda akan mendapatkan

mysqldump: Kesalahan 2013: Koneksi terputus

Ranjeet Ranjan
sumber
1

Saya menemukan:

--max-allowed-packet=1G --net-buffer-length=32704

... membuatnya berfungsi di tempat yang tidak (andal) sebelumnya, meskipun perubahan batas waktu baca / tulis bersih, TCP keepalives dll.

The max_allowed_packetpengaturan saja tidak membuatnya bekerja, jadi mungkin tidak diperlukan jika net_buffer_lengthdigunakan. - ralph-bolton

Mengubah max-allowed-packetdan net-buffer-lengthtampaknya jauh lebih baik daripada menonaktifkan sisipan yang diperluas. - kristofer

Lihat juga Apa max_allowed_packet cukup besar, dan mengapa saya perlu mengubahnya?

pengguna126897
sumber