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
Réponses:
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.
la source
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.
la source
Une connexion interrompue est considérée comme une erreur de connexion dans MySQL qui peut ne pas être enregistrée dans le journal des erreurs MySQL. Voir les connexions TCP abandonnées non enregistrées en tant qu'erreurs mais entraînant un hôte bloqué .
la source