web-dev-qa-db-fra.com

Erreur MySQL 1153 - Vous avez un paquet supérieur à octets 'max_allowed_packet'

J'importe un dump 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 permet de très grandes insertions.


Ceci est sur ma machine locale, un Mac avec MySQL 5 installé à partir du paquet MySQL.

Où puis-je changer max_allowed_packet pour pouvoir importer le dump? 

Y a-t-il autre chose que je devrais mettre? 

Le fait d'exécuter mysql --max_allowed_packet=32M … a entraîné la même erreur.

386
kch

Vous devrez probablement le changer pour le client (vous exécutez pour importer) 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

De plus, changez 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.)

517
Michael Pryor

Comme michaelpryor l'a dit, vous devez le changer pour les deux 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, en fonction de la configuration. 

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

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

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

118
Joshua Fox

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

[mysqld]

max_allowed_packet = 10M
36
GHad

Re my.cnf sous Mac OS X lors de l’utilisation de MySQL depuis la distribution du paquet mysql.com dmg

Par défaut, my.cnf est introuvable.

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

15
kch

Dans etc/my.cnf, essayez de remplacer max_allowed _packet et net_buffer_length par

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
Amirtha Rajan

Le correctif consiste à augmenter le max_allowed_packet du démon MySQL. Vous pouvez le faire pour 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)

Puis pour importer votre dump:

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

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

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

Légèrement sans rapport avec votre problème, en voici donc 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 chaîne non fermé dans mon code. Des doigts mouillés arrivent.

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

4
jplindstrom

Utilisez une variable max_allowed_packet émettant une commande comme

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

4
Tomasz Tybulewicz

Parfois, réglage de type:

max_allowed_packet = 16M

dans my.ini ne fonctionne pas. 

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

set-variable = max_allowed_packet = 32M

ou

set-variable = max_allowed_packet = 1000000000

Puis redémarrez le serveur:

/etc/init.d/mysql restart

Le fait que max_allowed_packet soit à la valeur supérieure présente un risque pour la sécurité, car un attaquant peut transmettre des paquets de taille plus importante et provoquer le crash du système. 

Donc, la valeur optimale de max_allowed_packet doit être ajustée et testée.

Il vaut mieux changer si nécessaire (avec set global max_allowed_packet = xxx) Que de l’avoir dans le cadre de my.ini ou my.conf .

1
Shiva

Erreur:

Erreur 1153 (08S01) à la ligne 6772: vous avez un paquet plus grand que Octets 'max_allowed_packet' L'opération a échoué avec le code de sortie 1

QUERY:

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
0
TinhNQ

Définissez max_allowed_packet sur la même chose (ou plus) que ce que vous avez fait lorsque vous l'avez vidé avec mysqldump. Si vous ne pouvez pas faire cela, effectuez à nouveau le vidage avec une valeur plus petite.

En d’autres termes, en supposant que vous l’ayez vidé avec mysqldump. Si vous avez utilisé un autre outil, vous êtes seul.

0
MarkR

Je travaille dans un environnement d'hébergement partagé et j'ai hébergé un site Web basé sur Drupal. Je ne peux pas éditer le fichier my.ini ni le fichier my.conf également.

J'ai donc supprimé toutes les tables liées à Cache et j'ai donc pu résoudre ce problème. Je cherche quand même une solution/un moyen idéal de gérer ce problème.

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

0
Raj Pawan Gumdal