MySQL Error 1153 - Mendapat paket lebih besar dari byte 'max_allowed_packet'

430

Saya mengimpor dump MySQL dan mendapatkan kesalahan berikut.

$ mysql foo < foo.sql 
ERROR 1153 (08S01) at line 96: Got a packet bigger than 'max_allowed_packet' bytes

Rupanya ada lampiran dalam database, yang membuat sisipan sangat besar.


Ini ada di mesin lokal saya, Mac dengan MySQL 5 diinstal dari paket MySQL.

Di mana saya berubah max_allowed_packetagar dapat mengimpor dump?

Apakah ada hal lain yang harus saya atur?

Hanya menjalankan mysql --max_allowed_packet=32M …menghasilkan kesalahan yang sama.

kch
sumber
kemungkinan duplikat dari Bagaimana mengubah ukuran max_allowed_packet
Muleskinner
@Muleskinner, pertanyaan ini diposting 3 tahun sebelum yang Anda sebutkan dan saya tunjukkan ini 4 tahun setelah komentar Anda. : p
tiomno
2
Tautan Webyog.com rusak: 404
Pathros
Di sini , kesalahan yang sama, "Paket untuk permintaan adalah besar (5526600> 1048576).", Disebabkan oleh entri kata sandi yang salah, saat menyambungkan ke database MySQL menggunakan DataGrip 2016.1 oleh JetBrains, dan diselesaikan saat diperbaiki (menggunakan kata sandi yang tepat sesuai dengan pengguna basis data MySQL).
nyedidikeke

Jawaban:

589

Anda mungkin harus mengubahnya untuk kedua klien (Anda menjalankan untuk melakukan impor) DAN daemon mysqld yang berjalan dan menerima impor.

Untuk klien, Anda dapat menentukannya di baris perintah:

mysql --max_allowed_packet=100M -u root -p database < dump.sql

Juga, ubah file my.cnf atau my.ini di bawah bagian mysqld dan setel:

max_allowed_packet=100M

atau Anda dapat menjalankan perintah ini di konsol MySQL yang terhubung ke server yang sama:

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000;

(Gunakan nilai yang sangat besar untuk ukuran paket.)

Michael Pryor
sumber
Saya memiliki server dengan 16 GB RAM, apakah itu ide buruk untuk diatur max_allowed_packetke 100 MB?
Webnet
11
FYI - itu membantu saya untuk menyelesaikan kesalahan BERBEDA - "# 2006 server telah pergi"
itsho
37
Ketahuilah bahwa menggunakan "set global" berfungsi hingga layanan mysql berikutnya dimulai ulang.
Will Shaver
2
Lewati "atur global" dan final ";" saat menambahkan nilai-nilai ini ke file my.ini atau my.cnf. Mis: "net_buffer_length = 1000000" di my.conf.
Rustavore
3
Pada CentOS 5, my.cnf terletak di
/etc/my.cnf
124

Seperti michaelpryor mengatakan, Anda harus mengubahnya untuk kedua klien dan server mysqld daemon.

Solusi untuk baris perintah klien bagus, tetapi file ini tidak selalu berhasil, tergantung pada konfigurasi.

Jadi, buka terminal, ketik mysql untuk mendapatkan prompt mysql, dan jalankan perintah berikut:

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000; 

Biarkan prompt mysql terbuka, dan jalankan eksekusi SQL baris perintah pada terminal kedua ..

Joshua Fox
sumber
2
Memecahkan masalah bagi saya; impor yang saya lakukan adalah sekali saja, dan saya tidak dapat dengan mudah mengubah konfigurasi. Ini bekerja dengan baik. : D
Rob Howard
39

Ini dapat diubah di my.inifile Anda (pada Windows, terletak di \ Program Files \ MySQL \ MySQL Server) di bawah bagian server, misalnya:

[mysqld]

max_allowed_packet = 10M
GHad
sumber
5
pada mac, file jelas terletak di tempat lain.
kch
2
yakin, tetapi konfigurasi masih di suatu tempat meskipun saya tidak tahu lokasi yang tepat
GHad
Bagi saya di Fedora 20 dengan MariaDB, menempatkan pengaturan itu di akhir /etc/my.cnf.d/server.cnf melakukan trik. Saya harus me-restart layanan tentu saja ... sudo nano systemctl restart mariadb.service
Ray Foss
File tersebut kemungkinan besar adalah "my.cnf" dan pada sistem nix, biasanya di / etc / atau / usr / local / etc. Setelah Anda mengedit, pastikan untuk me-restart server mysql untuk menerapkan perubahan.
Chris
17

Re my.cnf di Mac OS X saat menggunakan MySQL dari distribusi paket dmg mysql.com

Secara default, my.cnf tidak dapat ditemukan.

Anda perlu menyalin satu dari /usr/local/mysql/support-files/my*.cnfke /etc/my.cnfdan me-restart mysqld. (Yang dapat Anda lakukan di panel preferensi MySQL jika Anda menginstalnya.)

kch
sumber
Konfigurasi default di tempat untuk OSX tampaknya adalah my-medium.cnf, meskipun ukuran max_allowed_packet adalah sama di my-large.cnf ... sampai Anda mulai mengubah hal-hal :)
Chris Burgess
Dalam kasus saya /usrl/local/mysql/my.cnf saya tidak berfungsi sampai saya menyalinnya ke /etc/my.cnf.
VG
14

Di etc / my.cnf coba ubah max_allowed _packet dan net_buffer_length menjadi

max_allowed_packet=100000000
net_buffer_length=1000000 

jika ini tidak berhasil maka coba ubah ke

max_allowed_packet=100M
net_buffer_length=100K 
Amirtha Rajan
sumber
12

Cara mengatasinya adalah meningkatkan max_allowed_packet daemon MySQL. Anda bisa melakukan ini pada daemon yang sedang berjalan dengan masuk sebagai Super dan menjalankan perintah berikut.

# mysql -u admin -p

mysql> set global net_buffer_length=1000000;
Query OK, 0 rows affected (0.00 sec)

mysql> set global max_allowed_packet=1000000000;
Query OK, 0 rows affected (0.00 sec)

Kemudian untuk mengimpor dump Anda:

gunzip < dump.sql.gz | mysql -u admin -p database
Primoz Roma
sumber
Pada versi MySQL apa Anda menjalankan ini?
crmpicco
6

Pada CENTOS 6 /etc/my.cnf, di bawah bagian [mysqld] sintaks yang benar adalah:

[mysqld]
# added to avoid err "Got a packet bigger than 'max_allowed_packet' bytes"
#
net_buffer_length=1000000 
max_allowed_packet=1000000000
#
Mike Castro Demaria
sumber
4

Gunakan max_allowed_packetvariabel mengeluarkan perintah seperti

mysql --max_allowed_packet=32M -u root -p database < dump.sql

Tomasz Tybulewicz
sumber
2
mencobanya, tidak berhasil. seluruh dump di 272mb, dicoba dengan max lebih tinggi dari itu.
kch
4

Sedikit tidak terkait dengan masalah Anda, jadi ini satu untuk Google.

Jika Anda tidak mysqldump SQL, mungkin SQL Anda rusak.

Saya baru saja mendapatkan kesalahan ini dengan secara tidak sengaja memiliki string literal yang tidak tertutup dalam kode saya. Jari-jari ceroboh terjadi.

Itu pesan kesalahan yang luar biasa untuk dapatkan string yang dapat melarikan diri, terima kasih untuk MySQL itu!

jplindstrom
sumber
1
Saya juga mendapat kesalahan ini karena SQL yang rusak. Lebih khusus lagi, tabel saya memiliki batasan nol dan kode saya MEMASANG nilai nol. Alih-alih memberi saya kesalahan informatif, MySQL mengembalikan max_allowed_packetkesalahan. Jika itu membantu bagi mereka di masa depan, saya INSERTing menggunakan panda APIdf.to_sql(...)
Alex Petralia
1

Terkadang mengetik pengaturan:

max_allowed_packet = 16M

di my.ini tidak berfungsi.

Coba tentukan my.ini sebagai berikut:

set-variable = max_allowed_packet = 32M

atau

set-variable = max_allowed_packet = 1000000000

Kemudian restart server:

/etc/init.d/mysql restart
Grzegorz Brzęczyszczykiewicz
sumber
1

Ini adalah risiko keamanan untuk memiliki max_allowed_packetnilai yang lebih tinggi, karena penyerang dapat mendorong paket berukuran lebih besar dan merusak sistem.

Jadi, Nilai Optimal max_allowed_packetuntuk disetel dan diuji.

Adalah lebih baik untuk mengubah ketika diperlukan (menggunakan set global max_allowed_packet = xxx) daripada memilikinya sebagai bagian dari my.ini atau my.conf .

Siwa
sumber
0

Saya bekerja di lingkungan hosting bersama dan saya telah meng-host situs web berdasarkan Drupal. Saya tidak dapat mengedit my.inifile atau my.conffile juga.

Jadi, saya menghapus semua tabel yang terkait Cachedan karenanya saya bisa menyelesaikan masalah ini. Saya masih mencari solusi / cara yang sempurna untuk menangani masalah ini.

Sunting - Menghapus tabel yang menciptakan masalah bagi saya, karena Drupal mengharapkan bahwa tabel ini harus ada. Jadi saya mengosongkan isi tabel ini yang memecahkan masalah.

Raj Pawan Gumdal
sumber
0

Kesalahan:

GALAT 1153 (08S01) pada baris 6772: Mendapat paket lebih besar dari byte 'max_allowed_packet' Operasi gagal dengan kode sandi 1

PERTANYAAN:

SET GLOBAL max_allowed_packet=1073741824;
SHOW VARIABLES LIKE 'max_allowed_packet'; 

Nilai maksimum:

Default Value (MySQL >= 8.0.3)  67108864
Default Value (MySQL <= 8.0.2)  4194304
Minimum Value   1024
Maximum Value   1073741824
Tính Ngô Quang
sumber
-1

Setel max_allowed_packet ke yang sama (atau lebih) dari apa itu ketika Anda membuangnya dengan mysqldump. Jika Anda tidak dapat melakukannya, lakukan dump lagi dengan nilai yang lebih kecil.

Yaitu, dengan asumsi Anda membuangnya dengan mysqldump. Jika Anda menggunakan beberapa alat lain, Anda sendiri.

MarkR
sumber