Erreur de connexion à la base de données mysql

9

Mon application doit effectuer des connexions assez fréquentes à une base de données mysql sur une autre machine. Cependant, je reçois fréquemment des erreurs de connexion; Je peux généralement me connecter, mais après de nombreuses tentatives. Le message d'erreur que je reçois est:

Mysql.mysql(): Couldn't connect to SQL-server: Lost connection to MySQL server at 'reading authorization packet', system error: 2

J'ai lu les informations ici: http://dev.mysql.com/doc/refman/5.0/en/error-lost-connection.html ainsi que les commentaires du bug http://bugs.mysql.com/bug .php? id = 28359 .

Il existe un certain nombre de connexions interrompues, comme vous pouvez le voir:

mysql> AFFICHER LE STATUT MONDIAL COMME 'Aborted_connects';
+ ------------------ + ------- +
| Nom_variable | Valeur |
+ ------------------ + ------- +
| Aborted_connects | 2540 |
+ ------------------ + ------- +

J'ai augmenté le délai d'attente de 5 à 15 s:

mysql> afficher des variables comme 'connect_timeout';
+ ----------------- + ------- +
| Nom_variable | Valeur |
+ ----------------- + ------- +
| connect_timeout | 15 |
+ ----------------- + ------- +

mais cela n'a pas aidé. Des suggestions pour déboguer cela? Cela rend l'interaction avec la base de données horriblement lente quand elle doit en moyenne essayer de se connecter 5 fois avant de fonctionner.

Je n'ai pas encore essayé de garder la connexion ouverte pendant toute la durée de vie de l'application, serait-ce mieux? Comment empêcher la fermeture de la connexion?

Si cela aide l'ordinateur avec les problèmes, c'est Windows 7 32 bits, alors que le serveur mysql est sous Debian Linux.

Zitrax
la source
Je sais que ce n'est qu'un bandage, mais l'URL du rapport de bogue indique: "J'ai contourné le problème en augmentant la variable globale connect_timeout à 30 secondes." Voulez-vous essayer une valeur plus élevée?
JoseK
1
Un confort froid, mais c'est une question bien écrite. Excellent suivi de l'article d'Eric S. Raymond ... +1 à vous, et bonne chance.
gWaldo
@JoseK bien sûr, je peux essayer mais je doute que cela fasse beaucoup de différence car je n'ai vu aucune amélioration en augmentant de 5 à 15.
Zitrax
Est-ce l'une des variables qui ne fixe aucune limite si la valeur est définie sur 0?
pjmorse
1
Êtes-vous certain qu'il n'y a pas de problème de connectivité entre les machines, peut-être un problème de réseau?
Warner

Réponses:

2

En examinant tous les détails des bogues et les rapports, je pense qu'il y a un problème côté réseau ou client ici. Quelque chose altère ou ajoute trop de latence aux données mysql.

Sur un réseau clair, effectuez une trace Wireshark et vérifiez à quoi ressemble la conversation. Assurez-vous qu'aucune mise en forme du trafic n'est en cours. Cela ne ressemble qu'à un problème 64 bits, alors vérifiez une version 32 bits juste pour vous assurer qu'il s'agit du même problème. Cochez une case Windows XP - M $ a fait des trucs géniaux sur la pile réseau de Vista, ce qui lui a fait perdre du temps! Nous n'avons pas de problèmes de réseautage avec les machines Vista et Win7!

Si vous gérez une trace Wirehark, veuillez coller et mettre le lien comme nous aimerions tous avoir un look je pense.

Khushil
la source
Que voulez-vous dire par «semble être un problème 64 bits»? Il s'agit d'une installation 32 bits. Et désolé j'ai mentionné Vista, c'est Win7, description corrigée.
Zitrax
Je ne connais pas très bien le débogage avec Wireshark. Mais certaines choses me semblent étranges, il y a quelques paquets RST redessinés et TCP Retransimission, et le temps de certains de certains paquets est négatif, comme -257,3 secondes.
Zitrax
pouvez-vous utiliser un autre commutateur et refaire un test s'il vous plaît. marque différente si vous en avez un? si vous pouviez coller ou zipper et rendre disponible la décharge de wirehark, nous pourrions jeter un coup d'œil ...
Khushil