406 votes

Comment modifier la taille max_allowed_packet ?

J'ai un problème avec les champs BLOB dans ma base de données MySQL. Lorsque je télécharge des fichiers d'une taille supérieure à environ 1 Mo, j'obtiens une erreur. Packets larger than max_allowed_packet are not allowed.

Voici ce que j'ai essayé :

Dans le MySQL Query Browser, j'ai lancé une commande show variables like 'max_allowed_packet' ce qui m'a donné 1048576.

Puis j'exécute la requête set global max_allowed_packet=33554432 suivi par show variables like 'max_allowed_packet' - il me donne 33554432 comme prévu.

Mais lorsque je redémarre le serveur MySQL, il revient comme par magie à 1048576. Qu'est-ce que je fais de mal ici ?

Question bonus, est-il possible de compresser un champ BLOB ?

1 votes

Un champ BLOB est un Binary Large OBject. Ce ne sont que des bits. Donc oui, vous pouvez compresser le contenu, et cela donne d'autres bits (et, espérons-le, moins) que vous stockez dans le champ BLOB à la place. Cela change simplement les données que vous y mettez. Vous devrez également décompresser le contenu de la BLOB lorsque vous en aurez à nouveau besoin.

0 votes

Ok merci, j'avais espéré qu'une fonction de compression intégrée à mysql existait.

506voto

Manuel Points 4262

Changement dans la my.ini ou ~/.my.cnf en incluant la ligne unique sous [mysqld] ou [client] dans votre fichier :

max_allowed_packet=500M

puis redémarrez le service MySQL et vous avez terminé.

Voir le documentation pour de plus amples informations.

1 votes

Merci, cela semble fonctionner même si j'avais espéré que cela serait possible sans avoir à modifier manuellement les fichiers ini.

0 votes

Modifier le fichier my.ini est en fait la même chose que modifier les paramètres d'autres programmes. Ici, c'est juste un fichier à partir duquel le programme lit les informations.

87 votes

Pour les lecteurs de FYI, c'est aussi la solution à l'erreur "MySQL a disparu".

299voto

TehShrike Points 4409

Le site max_allowed_packet peut être définie globalement en exécutant une requête.

Cependant, si vous ne le modifiez pas dans le fichier my.ini (comme le suggère le dragon112), la valeur sera réinitialisée lorsque le serveur redémarrera. même si vous la définissez de manière globale.

Pour changer le paquet maximum autorisé pour tout le monde à 1GB jusqu'à ce que le serveur redémarre :

SET GLOBAL max_allowed_packet=1073741824;

7 votes

Cela n'aide pas :(. Il affiche "Query OK, 0 rows affected (0.00 sec)".

18 votes

@artnikpro Cela fonctionne, "Query OK, 0 rows affected (0.00 sec)" peut sembler trompeur mais c'est vrai.

17 votes

Ne fonctionne pas pour moi. SHOW VARIABLES WHERE variable_name = 'max_allowed_packet' montre toujours l'ancienne valeur

114voto

naw103 Points 238

L'un de mes jeunes développeurs a eu du mal à le modifier pour moi, alors j'ai pensé que je pourrais le développer plus en détail pour les utilisateurs de Linux :

1) borne ouverte

2) ssh Root@YOURIP

3) entrez le mot de passe Root

4) nano /etc/mysql/my.cnf (si la commande n'est pas reconnue, faites d'abord ceci ou essayez vi puis répétez : yum install nano )

5) ajoutez la ligne : max_allowed_packet=256M (évidemment ajustez la taille pour ce dont vous avez besoin) sous la section [MYSQLD]. Il a fait l'erreur de la mettre d'abord en bas du fichier et cela n'a pas fonctionné.

enter image description here

6) Contrôle + O (enregistrer) puis ENTER (confirmer) puis Contrôle + X (quitter le fichier)

7) service mysqld restart

8) Vous pouvez vérifier le changement dans la section des variables sur phpmyadmin

0 votes

Ceci a été fait sur CentosOS6, je suis bien sûr d'accord sur le fait de ne pas utiliser l'accès root ssh.

0 votes

@tamasd Quelques distros GNU/Linux que j'ai utilisées (comme Debian 8 et CentOS 6) produisent sudo: command not found ou this incident will be reported car soit sudo n'a pas été installé et configuré. Serait-il préférable d'alléger cette réponse avec des instructions sur la mise en place de sudo pour la première fois ?

0 votes

Le problème n'est pas Root ssh, mais la connexion par mot de passe. Un compte utilisateur avec la permission sudo est presque aussi peu sûr que Root. Utilisez simplement une authentification basée sur une clé SSH.

54voto

fstang Points 146

Je pense que certains voudront aussi savoir comment trouver le fichier my.ini sur leur PC. Pour les utilisateurs de Windows, je pense que le meilleur moyen est le suivant :

  1. Win+R (raccourci pour 'run'), tapez services.msc , Enter
  2. Vous pouvez trouver une entrée comme "MySQL56", faire un clic droit dessus, sélectionner propriétés
  3. Vous pourriez voir quelque chose comme "D:/Program Files/MySQL/MySQL Server 5.6/bin". \mysqld " --defaults-file=" D:\ProgramData\MySQL\MySQL Serveur 5.6 \my.ini " MySQL56

J'ai obtenu cette réponse de http://bugs.mysql.com/bug.php?id=68516

2 votes

C'est important sous Windows. J'avais MySQL en tant que service et j'ai édité my.ini dans Workbench et cette réponse m'a fait réaliser que MySQL en tant que service utilise un my.ini différent de celui que j'ai édité dans Workbench.

1 votes

Fonctionne toujours sur mysql 8. bien joué.

13voto

xpro-fedtest Points 468

Si vous obtenez cette erreur lors de l'exécution d'une sauvegarde, max_allowed_packet peut être défini dans le my.cnf notamment pour mysqldump .

[mysqldump]
max_allowed_packet=512M

J'ai obtenu cette erreur en effectuant une mysqldump et je n'ai pas compris parce que j'avais ce jeu dans my.cnf en vertu de la [mysqld] section. Une fois que j'ai compris que je pouvais le mettre pour [mysqldump] et j'ai défini la valeur, mes sauvegardes se sont terminées sans problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X