J'ai une base de données mysql
(Version 5.6.23-log running on windows
) configuré pour être utilisé avec Teamcity. Lors de l'exécution d'une commande contre elle en utilisant HeidiSQL, j'obtiens une erreur:
Erreur SQL (2027): paquet mal formé
Cette erreur se produit uniquement si le jeu de résultats est supérieur à un certain nombre de lignes (l'utilisation de LIMIT 14561 fonctionne, 14562 donne cette erreur).
Je crois que cette erreur n'est pas due à Heidi car TeamCity ne démarre pas lors de l'exécution de la même commande.
Je suppose que cela a quelque chose à voir avec la taille des données qui devient trop grande et quelque chose qui échoue, mais je ne trouve aucun moyen d'identifier plus précisément quel est le problème et donc comment le résoudre.
Si quelqu'un peut me dire ce que je peux faire pour prévenir ce problème ou à tout le moins comment je pourrais mieux diagnostiquer ce problème, je serais très reconnaissant.
Je suppose que vous avez des données TEXT/BLOB et que les données de ligne dans la ligne 14562 sont plus grandes que votre --- MySQL Packet , qui est dimensionné par max_allowed_packet .
Vous devez réserver plus d'espace pour max_allowed_packet
Jul 29, 2013
: paramètre Max_packet_allowed pour Windows 7Jul 03, 2013
: Quel max_allowed_packet est assez grand, et pourquoi dois-je le changer?Jun 12, 2012
: Erreur de lecture des paquets de communication MySQLVos journaux de rétablissement InnoDB (dimensionnés par innodb_log_file_size ) doivent également être augmentés. je l'ai appris pour la première fois (par rapport au paquet MySQL) de ServerFault . Je fais référence à ce message ServerFault dans certains de mes messages:
Apr 27, 2011
: max_allowed_packet modifié et toujours erreur "Packet Too Large"Aug 01, 2011
: Comment max_allowed_packet affecte-t-il la sauvegarde et la restauration d'une base de données?Je maximiserais le max_allowed_packet à 1G et redimensionner vos journaux de rétablissement à 1,5G
[mysqld]
max_allowed_packet = 1G
innodb_log_file_size = 1536M
Ensuite, exécutez ceci pour purger toutes les transactions des journaux de rétablissement:
mysql> SET GLOBAL innodb_fast_shutdown = 0;
Ensuite, redémarrez mysql (ce qui est requis).
MySQL 5.6 gérera le redimensionnement des journaux pour vous lors du redémarrage. Les versions précédentes de MySQL nécessitent que vous le fassiez manuellement. Vos étapes après avoir changé my.cnf
et réglage innodb_fast_shutdown
à 0, vous feriez ce qui suit
service mysql stop
mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak
service mysql start
Une erreur très courante est l'erreur 2027, en particulier avec l'utilisation de LOAD DATA INFILE
Certains ont suggéré d'utiliser d'anciennes versions de libmysql.dll
Certains soupçonnent un problème de jeu de caractères: Code d'erreur: 2027 paquet mal formé
Aucun des conseils ci-dessus n'a été utile dans mon cas. Il s'avère que c'était un bug dans MySQL et pas une mauvaise configuration comme suggéré dans les autres réponses. En changeant max_allowed_packet
etc n'a eu aucun effet.
Ensuite, j'ai trouvé ceci: https://bugs.mysql.com/bug.php?id=77298
"Il s'agit du double du bogue interne 20895852 qui est corrigé. Noté dans les changelogs de 5.6.25, 5.7.8, 5.8.0."
Pour les petites valeurs de la variable système read_rnd_buffer_size, la mise en cache interne des résultats temporaires peut échouer et entraîner l'échec de l'exécution de la requête.
Je suis passé de 5.6.22
à 5.6.26
et le problème a disparu sans aucun changement de configuration.
Tout ce que j'ai fait, c'est
brew upgrade mysql
et redémarrez le serveur dans un nouvel onglet de terminal à l'aide
mysql.server restart
C'était tout.
En fin de compte, j'ai découvert que si je vidais les données d'une base de données vers une autre sur une machine différente, les choses semblaient fonctionner. J'ai donc décidé de comparer les deux fichiers de configuration et de mettre à jour des valeurs différentes. Ce faisant, j'ai mis à jour les éléments suivants:
tmp_table_size
de 5M
à 19M
myisam_sort_buffer_size
de 8M
à 30M
read_buffer_size
de 0
à 59K
read_rnd_buffer_size
de 0
à 256K
sort_buffer_size
de 0
à 256K
query_cache_type
de 1
à 0
Faire cela a résolu mes problèmes. Je suis sûr que tous ne sont pas nécessaires, donc je serais heureux que quelqu'un explique pourquoi cela a résolu mon problème dans une meilleure réponse (et je me ferai un plaisir de leur accepter dans ce cas).