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.
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.)
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.
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
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é.)
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
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
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
#
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!
Utilisez une variable max_allowed_packet
émettant une commande comme
mysql --max_allowed_packet=32M
-u root -p database < dump.sql
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 .
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
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.
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.