Erreur MySQL 1153 - Vous avez un paquet plus grand que les octets 'max_allowed_packet'


430

J'importe un vidage MySQL et j'obtiens l'erreur suivante.

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

Apparemment, il y a des pièces jointes dans la base de données, ce qui fait de très grandes insertions.


C'est sur ma machine locale, un Mac avec MySQL 5 installé à partir du package MySQL.

Où dois-je changer max_allowed_packetpour pouvoir importer le vidage?

Y a-t-il autre chose que je devrais régler?

La simple exécution a mysql --max_allowed_packet=32M …entraîné la même erreur.



@Muleskinner, cette question a été publiée 3 ans avant celle que vous mentionnez et je le signale 4 ans après votre commentaire. : p
tiomno

2
Webyog.com Le lien est rompu: 404
Pathros

Ici , une erreur similaire, «Le paquet pour la requête est trop volumineux (5526600> 1048576). correspondant à l'utilisateur de la base de données MySQL).
nyedidikeke

Réponses:


589

Vous devrez probablement le changer pour le client (vous exécutez pour faire l'importation) ET le démon mysqld qui exécute et accepte l'importation.

Pour le client, vous pouvez le spécifier sur la ligne de commande:

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

Modifiez également le fichier my.cnf ou my.ini dans la section mysqld et définissez:

max_allowed_packet=100M

ou vous pouvez exécuter ces commandes dans une console MySQL connectée à ce même serveur:

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

(Utilisez une très grande valeur pour la taille du paquet.)


J'ai un serveur avec 16 Go de RAM, est-ce une mauvaise idée de régler max_allowed_packetà 100 Mo?
Webnet

11
Pour info - cela m'a aidé à résoudre une erreur DIFFÉRENTE - "Le serveur # 2006 est parti"
itsho

37
Sachez que l'utilisation de "set global" fonctionne jusqu'au prochain redémarrage du service mysql.
Will Shaver

2
Ignorez "définir global" et le dernier ";" lors de l'ajout de ces valeurs aux fichiers my.ini ou my.cnf. Ex: "net_buffer_length = 1000000" dans my.conf.
Rustavore

3
Sur CentOS 5, my.cnf est situé à /etc/my.cnf
Rustavore

124

Comme l'a dit michaelpryor, vous devez le changer à la fois pour le client et le serveur démon mysqld.

Sa solution pour la ligne de commande client est bonne, mais les fichiers ini ne font pas toujours l'affaire, selon la configuration.

Alors, ouvrez un terminal, tapez mysql pour obtenir une invite mysql et lancez ces commandes:

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

Gardez l'invite mysql ouverte et exécutez votre exécution SQL en ligne de commande sur un deuxième terminal.


2
Résolu le problème pour moi; l'importation que je fais est ponctuelle, et je ne peux pas facilement changer la configuration. Cela a très bien fonctionné. : D
Rob Howard

39

Cela peut être modifié dans votre my.inifichier (sous Windows, situé dans \ Program Files \ MySQL \ MySQL Server) sous la section serveur, par exemple:

[mysqld]

max_allowed_packet = 10M

5
sur un mac, fichier évidemment situé ailleurs.
kch

2
bien sûr, mais la configuration est toujours quelque part, même si je ne connais pas l'emplacement exact
GHad

Pour moi dans Fedora 20 avec MariaDB, placer ce paramètre à la fin de /etc/my.cnf.d/server.cnf a fait l'affaire. J'ai dû redémarrer le service bien sûr ... sudo nano systemctl restart mariadb.service
Ray Foss

Le fichier serait plus probablement "my.cnf" et sur les systèmes nix, généralement dans / etc / ou / usr / local / etc. Une fois que vous avez édité, assurez-vous de redémarrer le serveur mysql pour appliquer les modifications.
Chris

17

Re my.cnf sur Mac OS X lors de l'utilisation de MySQL à partir de la distribution de paquets mysql.com dmg

Par défaut, my.cnf est introuvable.

Vous devez copier l' un /usr/local/mysql/support-files/my*.cnfpour /etc/my.cnfet redémarrer mysqld. (Ce que vous pouvez faire dans le volet des préférences MySQL si vous l'avez installé.)


La configuration par défaut en place pour OSX semble être my-medium.cnf, bien que la taille max_allowed_packet soit la même dans my-large.cnf ... jusqu'à ce que vous commenciez à changer les choses :)
Chris Burgess

Dans mon cas, /usrl/local/mysql/my.cnf n'a pas fonctionné tant que je ne l'ai pas copié dans /etc/my.cnf.
VG

14

Dans etc / my.cnf, essayez de changer le max_allowed _packet et net_buffer_length en

max_allowed_packet=100000000
net_buffer_length=1000000 

si cela ne fonctionne pas, essayez de passer à

max_allowed_packet=100M
net_buffer_length=100K 

12

Le correctif consiste à augmenter le max_allowed_packet du démon MySQL. Vous pouvez le faire sur un démon en cours d'exécution en vous connectant en tant que Super et en exécutant les commandes suivantes.

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

Ensuite, pour importer votre vidage:

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

Sur quelle version de MySQL exécutiez-vous cela?
crmpicco

6

Sur CENTOS 6 /etc/my.cnf, sous la section [mysqld], la syntaxe correcte est:

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

4

Utilisez une max_allowed_packetvariable émettant une commande comme

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


2
essayé cela, n'a pas fonctionné. vidage entier en 272 Mo, essayé avec un maximum supérieur à cela.
kch

4

Légèrement sans rapport avec votre problème, en voici un pour Google.

Si vous n'avez pas mysqldumpé le SQL, il se peut que votre SQL soit cassé.

Je viens de recevoir cette erreur en ayant accidentellement un littéral de chaîne non fermée dans mon code. Des doigts bâclés se produisent.

C'est un message d'erreur fantastique à obtenir pour une chaîne galopante, merci pour cela MySQL!


1
J'ai également eu cette erreur à cause d'un SQL cassé. Plus précisément, ma table a des contraintes nulles et mon code INSÉRAIT des valeurs nulles. Au lieu de me donner une erreur informative, MySQL a renvoyé l' max_allowed_packeterreur. Si cela aide pour ceux à l'avenir, j'insérais en utilisant l'API pandasdf.to_sql(...)
Alex Petralia

1

Parfois, définition du type:

max_allowed_packet = 16M

dans my.ini ne fonctionne pas.

Essayez de déterminer le my.ini comme suit:

set-variable = max_allowed_packet = 32M

ou

set-variable = max_allowed_packet = 1000000000

Redémarrez ensuite le serveur:

/etc/init.d/mysql restart

1

C'est un risque de sécurité d'avoir max_allowed_packetune valeur plus élevée, car un attaquant peut pousser des paquets de plus grande taille et planter le système.

Donc, la valeur optimale max_allowed_packetà régler et à tester.

Il vaut mieux changer en cas de besoin (en utilisant set global max_allowed_packet = xxx) que de l'avoir dans le cadre de my.ini ou my.conf .


0

Je travaille dans un environnement d'hébergement partagé et j'ai hébergé un site Web basé sur Drupal. Je ne peux pas non plus modifier le my.inifichier ou le my.conffichier.

J'ai donc supprimé toutes les tables qui étaient liées à Cacheet donc j'ai pu résoudre ce problème. Je cherche toujours une solution / un moyen parfait pour gérer ce problème.

Edit - La suppression des tables a créé des problèmes pour moi, coz Drupal s'attendait à ce que ces tables soient existantes. J'ai donc vidé le contenu de ces tableaux qui ont résolu le problème.


0

Erreur:

ERREUR 1153 (08S01) à la ligne 6772: un paquet plus grand que les octets «max_allowed_packet» a échoué avec le code de sortie 1

REQUETE:

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

Valeur max:

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

-1

Définissez max_allowed_packet sur le même (ou plus) que ce qu'il était lorsque vous l'avez vidé avec mysqldump. Si vous ne pouvez pas faire cela, refaites le vidage avec une valeur plus petite.

Autrement dit, en supposant que vous l'ayez vidé avec mysqldump. Si vous avez utilisé un autre outil, vous êtes seul.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.