Connexion abandonnée (erreur de lecture des paquets de communication)

8

Le mysql error.log montre

[Warning] Aborted connection 320935 to db: '...' user: '...' host: '...' (Got an error reading communication packets)

Alors que le côté client obtient:

Lost connection to MySQL server at 'reading initial communication packet', system error: 111
Lost connection to MySQL server at 'reading authorization packet', system error: 0
and after a while: Host '...' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

J'ai lu le manuel mysql à ce sujet, et beaucoup d'autres discussions. J'ai donc changé certaines valeurs dans my.cnf

max_allowed_packet      = 512M
connect_timeout = 60
net_read_timeout = 120
innodb_buffer_pool_size = 5G

Regardé le journal des requêtes d'une connexion rompue:

22400 Connect user@host on dbname
22400 Query SELECT @@sql_mode
22400 Query     SET SESSION sql_mode=''
22400 Query     SET NAMES utf8
22400 Init DB   dbname
22400 Init DB   dbname

Statut de table vérifié. bind-address est l'IP du serveur mais je dois pouvoir me connecter de l'extérieur.

Aborted_connects is 196
PiTheNumber
la source
Pouvez-vous vérifier la qualité de la connexion entre les deux hôtes? 100 pings de base devraient faire ..
melsayed

Réponses:

4

Sur la base des données limitées, je me demande si vous avez un pare-feu entre le client et le serveur MySQL (il peut être directement sur les hôtes) qui autorise 3306 au serveur MySQL mais bloque les paquets de réponse à la demande SYN initiale.

Vous souhaiterez peut-être effectuer un vidage de paquets des deux côtés pour déterminer ce qui se passe du côté TCP et / ou vérifier les pare-feu qui existent entre les deux côtés.

Matthew Ife
la source
Merci. Quelles données pourrais-je fournir pour clarifier cela? Je n'ai pas de pare-feu de mon côté, je ne suis pas sûr de l'autre côté. Surtout la connexion fonctionne, donc je suppose que ce n'est pas un pare-feu. J'ai essayé le dumping de paquets mais il y a beaucoup de trafic et le problème ne se manifeste que quelques fois par jour. J'ai échoué à définir un filtre qui capture uniquement les paquets dont j'ai besoin.
PiTheNumber
4

Je soupçonne que ce n'est pas un problème mysql en tant que tel.

Vérifiez que la couche de transport est OK. Pouvez-vous obtenir une connexion TCP en utilisant telnet [db_server] 3306?

Votre client et votre serveur sont-ils d'accord pour savoir si la connexion doit être cryptée SSL?

Je ne peux pas penser à de nombreuses situations où je voudrais exécuter une connexion mysql sur Internet public, ce que je pense être ce que vous entendez par «capable de se connecter de l'extérieur». S'il n'est pas chiffré, cela représente un énorme risque pour la sécurité et la surcharge de configuration de SSL pour chaque connexion est trop élevée pour la plupart des utilisations. Vous voudrez peut-être envisager d'utiliser un tunnel chiffré persistant d'une certaine sorte.

mc0e
la source
la connexion telnet et la plupart des connexions fonctionnent correctement uniquement de temps en temps, ce problème apparaît. Oui, c'est une connexion sur Internet public. Je voudrais avoir le cryptage ici mais je ne contrôle pas l'autre extrémité. Quoi qu'il en soit, je dois d'abord stabiliser la connexion.
PiTheNumber