Comment changer la taille maximale de paquet autorisée

J'ai un problème avec les champs BLOB dans ma base de données MySQL-lors du téléchargement de fichiers de plus de 1 Mo environ, j'obtiens une erreur Packets larger than max_allowed_packet are not allowed.

Voici ce que j'ai essayé:

Dans le navigateur de requête MySQL, j'ai couru un show variables like 'max_allowed_packet' qui m'a donné 1048576.

Ensuite, j'exécute la requête set global max_allowed_packet=33554432 suivie de show variables like 'max_allowed_packet' - cela me donne 33554432 comme prévu.

Mais quand je redémarre le serveur MySQL, il remonte magiquement à 1048576. Ce que je fais mal ici?

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

242
demandé sur Muleskinner 2011-11-09 13:01:50

11 réponses

Modifiez le fichier my.ini ou ~/.my.cnf en incluant la seule ligne sous la section [mysqld] dans votre fichier:

max_allowed_packet=500M

Redémarrez ensuite le service MySQL et vous avez terminé.

Voir la documentation pour plus d'informations.

315
répondu Manuel 2016-02-02 11:00:46

La variable max_allowed_packet peut être définie globalement en exécutant une requête.

Toutefois, si vous ne le modifiez pas dans le fichier my.ini (comme l'a suggéré dragon112), la valeur sera réinitialisée au redémarrage du serveur, même si vous la définissez globalement.

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

SET GLOBAL max_allowed_packet=1073741824;
168
répondu TehShrike 2018-06-13 16:02:13

Un de mes développeurs juniors avait un problème à modifier cela pour moi, alors j'ai pensé que je développerais cela plus en détail pour les utilisateurs de linux:

1) ouvrir le terminal

2) racine ssh@YOURIP

3) entrez le mot de passe root

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

5) ajoutez la ligne: max_allowed_packet=256M (ajustez évidemment la taille pour tout ce dont vous avez besoin) sous la section [MYSQLD]. Il a fait une erreur de le mettre au bas du fichier en premier, donc cela n'a pas fonctionné.

entrez la description de l'image ici

6) contrôle + O (enregistrer) puis entrez (confirmer) puis contrôle + X (quitter le fichier)

7) Service mysqld restart

8) Vous pouvez vérifier la modification dans la section variables sur phpmyadmin

69
répondu naw103 2017-10-27 11:46:31

Je pense que certains veulent aussi savoir comment trouver le mon.fichier ini sur votre PC. Pour les utilisateurs de windows, je pense que la meilleure façon suivante:

  1. Win+R(touche de raccourci pour exécuter), tapez services.msc , Entrez
  2. vous pouvez trouver une entrée comme 'MySQL56', faites un clic droit dessus, sélectionnez Propriétés
  3. vous pourriez voir sth comme "D:/Program fichiers / MySQL / serveur MySQL 5.6/ bin \ mysqld" --defaults-file="D:\ProgramData\MySQL\MySQL serveur 5.6 \ ma.ini" MySQL56

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

31
répondu fstang 2013-11-22 03:30:11

En suivant toutes les instructions, voici ce que j'ai fait et travaillé:

mysql> SELECT CONNECTION_ID();//This is my ID for this session.
+-----------------+
| CONNECTION_ID() |
+-----------------+
|              20 |
+-----------------+
1 row in set (0.00 sec)

mysql> select @max_allowed_packet //Mysql do not found @max_allowed_packet
+---------------------+
| @max_allowed_packet |
+---------------------+
| NULL                |
+---------------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet; //That is better... I have max_allowed_packet=32M inside my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                    33554432 |
+-----------------------------+
1 row in set (0.00 sec)

mysql> **SET GLOBAL max_allowed_packet=1073741824**; //Now I'm changing the value.
Query OK, 0 rows affected (0.00 sec)

mysql> select @max_allowed_packet; //Mysql not found @max_allowed_packet
+---------------------+
| @max_allowed_packet |
+---------------------+
| NULL                |
+---------------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The new value. And I still have max_allowed_packet=32M inisde my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                  1073741824 |
+-----------------------------+
1 row in set (0.00 sec)

Donc, comme nous pouvons le voir, le max_allowed_packet a été changé en dehors de mon.ini.

Quitte la session et vérifie à nouveau:

mysql> exit
Bye

C:\Windows\System32>mysql -uroot -pPassword
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 21
Server version: 5.6.26-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT CONNECTION_ID();//This is my ID for this session.
+-----------------+
| CONNECTION_ID() |
+-----------------+
|              21 |
+-----------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The new value still here and And I still have max_allowed_packet=32M inisde my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                  1073741824 |
+-----------------------------+
1 row in set (0.00 sec)

Now I will stop the server
2016-02-03 10:28:30 - Server is stopped

mysql> SELECT CONNECTION_ID();
ERROR 2013 (HY000): Lost connection to MySQL server during query


Now I will start the server
2016-02-03 10:31:54 - Server is running


C:\Windows\System32>mysql -uroot -pPassword
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.6.26-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT CONNECTION_ID();
+-----------------+
| CONNECTION_ID() |
+-----------------+
|               9 |
+-----------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The previous new value has gone. Now I see what I have inside my.ini again.
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                    33554432 |
+-----------------------------+
1 row in set (0.00 sec)

Conclusion, après avoir défini GLOBAL max_allowed_packet=1073741824, le serveur aura le nouveau max_allowed_packet jusqu'à ce qu'il soit redémarré, comme quelqu'un l'a indiqué précédemment.

17
répondu zwitterion 2016-02-03 18:15:51

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

[mysqldump]
max_allowed_packet=512M

J'ai continué à obtenir cette erreur lors de l'exécution d'un mysqldump et je ne comprenais pas parce que j'avais cet ensemble dans my.cnf sous la section [mysqld]. Une fois que j'ai compris que je pouvais le définir pour [mysqldump] et que j'ai défini la valeur, mes sauvegardes se sont terminées sans problème.

12
répondu xpros 2016-02-02 11:01:18

Pour ceux qui exécutent wamp serveur mysql

Wamp icône de la barre - > MySql - > ma.ini

[wampmysqld]
port        = 3306
socket      = /tmp/mysql.sock
key_buffer_size = 16M
max_allowed_packet = 16M        // --> changing this wont solve
sort_buffer_size = 512K

Faites défiler jusqu'à la fin jusqu'à ce que vous trouviez

[mysqld]
port=3306
explicit_defaults_for_timestamp = TRUE

Ajouter la ligne de packet_size dans l'entre -

[mysqld]
port=3306
max_allowed_packet = 16M
explicit_defaults_for_timestamp = TRUE

Vérifiez si cela a fonctionné avec cette requête

Select @@global.max_allowed_packet;
8
répondu Sayka 2015-09-29 09:38:23

Beaucoup de répondants ont repéré le problème et ont déjà donné la solution.

Je veux juste Suggérer une autre solution, qui est changer la valeur de la variable Glogal à partir de L'outil Mysql Workbench. C'est bien sûr si vous utilisez Workbench exécuté localement sur le serveur (ou via une connexion SSH)

Vous vous connectez simplement à votre instance et allez dans le menu:

Serveur - > Fichier D'Options - > Réseau - > max_allowed_packed

Vous définissez la valeur désirée et ensuite, vous devez redémarrer le service MySql .

4
répondu cnom 2016-12-09 14:16:30

Cette erreur vient du fait que vos données contiennent une valeur plus grande que définie.

Il suffit d'écrire le max_allowed_packed=500M ou vous pouvez calculer que 500 * 1024k et l'utiliser au lieu de 500M si vous voulez.

Maintenant, il suffit de redémarrer le MySQL.

3
répondu Suresh 2011-11-10 04:03:56

Pour toute personne exécutant MySQL sur le service Amazon RDS, cette modification est effectuée via les groupes de paramètres . Vous devez créer un nouveau PG ou en utiliser un existant (autre que la valeur par défaut, qui est en lecture seule).

Vous devez rechercher le paramètre max_allowed_packet, modifier sa valeur,puis cliquer sur Enregistrer.

Dans votre instance MySQL, si vous avez créé un nouveau PG, vous devez attacher le PG à votre instance (vous devrez peut-être redémarrer). Si vous avez modifié un PG qui était déjà attaché à votre instance, les modifications seront appliquées sans redémarrage, à toutes vos instances qui ont CE PG attaché.

2
répondu SebaGra 2018-03-01 13:18:00

Si vous voulez télécharger une image ou des données de grande taille dans la base de données. Il suffit de changer le type de données à 'BIG BLOB'.

0
répondu Vishal J 2015-08-28 06:48:15