MySQL Hatası 1153 - 'max_allowed_packet' baytından daha büyük bir paket var


430

Bir MySQL dökümü alıyorum ve aşağıdaki hatayı alıyorum.

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

Görünüşe göre veritabanında çok büyük ekler yapan ekler var.


Bu benim yerel makinemde, MySQL paketinden MySQL 5 yüklü bir Mac.

max_allowed_packetDökümü içe aktarabilmek için nerede değiştirebilirim ?

Ayarlamam gereken başka bir şey var mı?

Sadece çalışmak mysql --max_allowed_packet=32M …aynı hatayla sonuçlandı.



@Muleskinner, bu soru bahsettiğinizden 3 yıl önce gönderildi ve bunu yorumunuzdan 4 yıl sonra işaret ediyorum. : p
tiomno

2
Webyog.com Bağlantı koptu: 404
Pathros

Burada benzer bir hata "Sorgu için paket büyük (5526600> 1048576).", JetBrains tarafından DataGrip 2016.1 kullanılarak MySQL veritabanına bağlanırken yanlış bir parola girişinden kaynaklandı ve düzeltildiğinde çözüldü (doğru parola kullanılarak) MySQL veritabanı kullanıcısına karşılık gelir).
nyedidikeke

Yanıtlar:


589

Muhtemelen hem istemciyi (içe aktarma işlemini gerçekleştirmeye çalışıyorsunuz) hem de içe aktarmayı çalıştıran ve kabul eden daemon mysqld için değiştirmeniz gerekir.

İstemci için komut satırında belirtebilirsiniz:

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

Ayrıca, mysqld bölümünün altındaki my.cnf veya my.ini dosyasını değiştirin ve ayarlayın:

max_allowed_packet=100M

veya bu komutları aynı sunucuya bağlı bir MySQL konsolunda çalıştırabilirsiniz :

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

(Paket boyutu için çok büyük bir değer kullanın.)


16 GB RAM'e sahip bir sunucum var, max_allowed_packet100 MB'ye ayarlamak kötü bir fikir mi?
Webnet

11
FYI - FARKLI bir hatayı
çözmeme

37
"Set global" kullanmanın bir sonraki mysql hizmeti yeniden başlatılıncaya kadar çalıştığını unutmayın.
Will Shaver

2
"Global olarak ayarla" yı ve son ";" bu değerleri my.ini veya my.cnf dosyalarına eklerken. Örn: my.conf dosyasındaki "net_buffer_length = 1000000".
Rustavore

3
CentOS 5'de, my.cnf
/etc/my.cnf

124

Mikro yardımcının dediği gibi, hem istemci hem de daemon mysqld sunucusu için değiştirmeniz gerekir .

İstemci komut satırı için çözümü iyidir, ancak ini dosyaları yapılandırmaya bağlı olarak her zaman hile yapmaz.

Bu nedenle, bir terminal açın, mysql istemi almak için mysql yazın ve şu komutları verin:

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

MySQL istemini açık tutun ve komut satırı SQL yürütme, ikinci bir terminalde çalıştırın.


2
Sorunu benim için çözdüm; yaptığım içe aktarma bir defalık ve yapılandırmayı kolayca değiştiremiyorum. Bu harika çalıştı. : D
Rob Howard

39

Bu my.ini, sunucu bölümü altındaki dosyanızda (Windows'ta, \ Program Files \ MySQL \ MySQL Server içinde) değiştirilebilir, örneğin:

[mysqld]

max_allowed_packet = 10M

5
Mac'te, dosya açıkça başka bir yerde bulunur.
kch

2
emin, ama tam konumu bilmiyorum rağmen yapılandırma hala bir yerde
GHad

Benim için MariaDB ile Fedora 20'de bu ayarı /etc/my.cnf.d/server.cnf sonuna yerleştirmek hile yaptı. Tabii ki hizmeti yeniden başlatmak zorunda kaldım ... sudo nano systemctl restart mariadb.service
Ray Foss

Dosya büyük olasılıkla "my.cnf" ve genellikle / etc / veya / usr / local / etc içindeki nix sistemlerinde olur. Düzenledikten sonra, değişikliği uygulamak için mysql sunucusunu yeniden başlattığınızdan emin olun.
Chris

17

Mysql.com dmg paket dağıtımından MySQL kullanırken Mac OS X'te yeniden my.cnf

Varsayılan olarak, my.cnf hiçbir yerde bulunmaz.

Sen birini kopyalamanız gerekir /usr/local/mysql/support-files/my*.cnfetmek /etc/my.cnfve yeniden başlatın mysqld. (Yüklediyseniz MySQL tercih bölmesinde yapabilirsiniz.)


OSX için yerinde varsayılan yapılandırma max_allowed_packet boyutu my-large.cnf aynı olmasına rağmen sen :) şeyleri değiştirmeyi başlayana kadar ... benim-medium.cnf gibi görünüyor
Chris Burgess

Benim durumumda /usrl/local/mysql/my.cnf /etc/my.cnf dosyasına kopyalayana kadar çalışmadı.
VG

14

Etc / my.cnf dizininde max_allowed _packet ve net_buffer_length değerini

max_allowed_packet=100000000
net_buffer_length=1000000 

Bu işe yaramazsa,

max_allowed_packet=100M
net_buffer_length=100K 

12

Çözüm, MySQL arka plan programının max_allowed_packet'ini artırmaktır. Bunu Super olarak oturum açıp aşağıdaki komutları çalıştırarak çalışan bir arka plan programına yapabilirsiniz.

# 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)

Ardından dökümünüzü içe aktarmak için:

gunzip < dump.sql.gz | mysql -u admin -p database

MySQL'in hangi sürümünü kullanıyordunuz?
crmpicco

6

CENTOS 6 /etc/my.cnf üzerinde, [mysqld] bölümünün altında doğru sözdizimi şöyledir:

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

4

max_allowed_packetGibi bir komut veren bir değişken kullanın

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


2
denedim, işe yaramadı. 272mb bütün dökümü, maksimum daha yüksek ile çalıştı.
kch

4

Sorununuzla biraz alakasız, işte Google için bir tane.

SQL'i mysqldump yapmadıysanız, SQL'iniz bozuk olabilir.

Ben sadece yanlışlıkla benim kodum kapatılmamış bir dize değişmezine sahip bu hatayı aldım. Özensiz parmaklar olur.

Kaçak bir dize almak için harika bir hata mesajı, bu MySQL için teşekkürler!


1
Ayrıca kırık SQL nedeniyle bu hatayı aldım. Daha spesifik olarak, benim tablo null kısıtlamaları vardır ve benim kod null değerler INSERTing oldu. Bana bilgilendirici bir hata vermek yerine, MySQL max_allowed_packethatayı döndürdü . Gelecekte yardımcı olursa, ben pandalar API kullanarak eklemedf.to_sql(...)
Alex Petralia

1

Bazen ayar yazın:

max_allowed_packet = 16M

my.ini içinde çalışmıyor.

My.ini dosyasını aşağıdaki gibi belirlemeye çalışın:

set-variable = max_allowed_packet = 32M

veya

set-variable = max_allowed_packet = 1000000000

Ardından sunucuyu yeniden başlatın:

/etc/init.d/mysql restart

1

Daha büyük bir max_allowed_packetdeğere sahip olmak bir güvenlik riskidir , çünkü bir saldırgan daha büyük boyutlu paketleri zorlayabilir ve sistemi çökertebilir.

Böylece, max_allowed_packetayarlanacak ve test edilecek Optimum Değer .

Gerektiğinde (kullanarak set global max_allowed_packet = xxx) değiştirmek , my.ini veya my.conf'un bir parçası olarak kullanmaktan daha iyidir .


0

Paylaşılan bir barındırma ortamında çalışıyorum ve Drupal tabanlı bir web sitesine ev sahipliği yaptım. my.iniDosyayı veya my.confdosyayı da düzenleyemiyorum .

Böylece, ilgili tüm tabloları sildim Cacheve bu nedenle bu sorunu çözebilirim. Yine de bu sorunu çözmek için mükemmel bir çözüm / yol arıyorum.

Düzenle - Tabloları silerek benim için sorun yarattı, coz Drupal bu tabloların var olmasını bekliyordu. Bu yüzden sorunu çözen bu tabloların içeriğini boşalttım.


0

Hata:

6772 satırında HATA 1153 (08S01): 'max_allowed_packet' bayttan daha büyük bir paket var İşlem, çıkış kodu 1 ile başarısız oldu

SORGU:

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

Maksimum değer:

Default Value (MySQL >= 8.0.3)  67108864
Default Value (MySQL <= 8.0.2)  4194304
Minimum Value   1024
Maximum Value   1073741824

-1

Max_allowed_packet öğesini mysqldump ile boşalttığınız zamankiyle (veya daha fazlasıyla) ayarlayın. Bunu yapamıyorsanız, dökümü tekrar daha küçük bir değerle yapın.

Yani, mysqldump ile terk ettiğinizi varsayarsak. Başka bir araç kullandıysanız, tek başınıza olursunuz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.