web-dev-qa-db-fra.com

Erreur MySQL: 2013, "Connexion perdue avec le serveur MySQL à la 'lecture du paquet de communication initial', erreur système: 0"

Je rencontre un problème de connexion à ma base de données MySQL locale à l'aide de la bibliothèque MySQLdb de Python. Le script fonctionnait bien auparavant, mais je vais parfois avoir l'erreur MySQL dans le titre. Il semble n'y avoir aucune explication quant au moment où l'erreur se produit et le script est toujours exécuté à partir du même ordinateur avec les mêmes arguments. 

Le serveur MySQL fonctionne en tant que service sous Windows XP SP3 en utilisant le port 3306 (fonctionne hébergé localement par phpMyAdmin), et le script est exécuté à partir d'un système d'exploitation invité Ubuntu 10.04 dans Oracle VM VirtualBox.

Je travaille actuellement sur ce problème en ouvrant une invite de commande et en exécutant 'net stop MySQL' puis 'net start MySQL'. Cela me permet d'exécuter le script plusieurs fois avant de générer l'erreur que je corrige en redémarrant le service MySQL.

Comme je modifie toujours le script, il existe des cas où le script génère une exception et ne se ferme pas correctement, bien que je capture l'exception et ferme le curseur et la connexion.

Le code pour se connecter à la base de données:

def __init__(self):
  try:
    print "Connecting to the MySQL database..."
    self.conn = MySQLdb.connect( Host = "192.168.56.1",
                                 user = "guestos",
                                 passwd = "guestpw",
                                 db = "testdb")
    self.cursor = self.conn.cursor(MySQLdb.cursors.DictCursor)
    print "MySQL Connection OK"
  except MySQLdb.Error, e:
    print "MySQLdb error %d: %s" % (e.args[0],e.args[1])
    raise

L'erreur complète générée lorsque cela se produit est la suivante:

MySQLdb error 2013: Lost connection to MySQL server at 'reading initial communication packet', system error: 0
Traceback (most recent call last):
  File "search.py", line 45, in <module>
    dataHandler = DataHandler()
  File "/home/guestos_user/workspace/Search/src/data_handler.py", line 25, in __init__
    db = "testdb")
  File "/usr/lib/pymodules/python2.6/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 170, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (2013, "Lost connection to MySQL server at 'reading initial communication packet', system error: 0")
17
Scott R
Sudo vi /etc/mysql/my.cnf

effacer

bind-address = 127.0.0.1

puis

Sudo reboot now

C'est tout. Sachez que cela rendra votre serveur mysql moins sécurisé car vous l'exposez.

18
Kean Tan

J'ai vu cela se produire lorsque des processus enfants tentent de partager le même identifiant de connexion mysql (solution = créer de nouvelles connexions pour chaque processus enfant). Je ne sais pas si cela est également possible lors du partage d'objets de connexion avec plusieurs threads. 

Cependant, ce n’est que l’une des nombreuses causes possibles. Voir la réponse de VVS dans Erreur MySQL 2013 pour une liste des ressources de dépannage.

4
Jeremy Brown

Avez-vous dans votre serveur MySQL un compte appelé guestos@YOURIPADDRESS? Vous devez avoir un compte pour accéder à votre serveur MySQL depuis YOURIPADDRESS!

Par exemple: Votre adresse IP est 192.168.56.2; alors vous devez créer un compte s'il n'existe pas pour y accéder.

mysql> create user [email protected] identified by 'guestpw';
2
Lucho

Le problème résolu pour moi juste en redémarrant mon mac. Bien qu'il puisse y avoir une solution plus spécifique pour cela.

1
manpreet singh

J'ai eu exactement la même erreur mysql (ERROR 2013 (HY000): Connexion perdue avec le serveur MySQL à la "lecture du paquet de communication initial", erreur système: 0 =) et je l'ai résolue en ajoutant une nouvelle ligne à/etc/hôtes.deny .

0
Pre Seznik

Je lance un serveur Windows et de temps en temps, le php-win.exe se charge et reste dans la liste des processus du gestionnaire de tâches Windows. 

Si vous savez que le fichier hôte est correct, annulez le processus php-win.exe et redémarrez iis iisreset.

Si vous utilisez Windows, votre problème devrait être résolu.

0
darrell

Pourriez-vous changer le bind-address = localhost et redémarrer le serveur MySQL? Il semble que ce problème soit lié au vôtre: http://forums.mysql.com/read.php?152,355740,355742#msg-355742

Aussi ceci-

Si le port MySQL est incorrect, l'erreur du client MySQL 2013 "Perte Connexion ...". Notez que cette erreur se produit également si le transfert de port est désactivé dans la configuration SSH (le paramètre de configuration 'AllowTcpForwarding' est défini sur 'no' dans le fichier 'sshd_config'). Il (ici) indique simplement qu'il n'y a pas de connexion de SSH à MySQL pour une raison quelconque. Mais l'API client mySQL "pense" qu'il y en avait un connexion et c’est pourquoi on dit 'Connexion perdue ...' et non "Impossible de se connecter ...". Il y avait une connexion réussie - mais pas à le serveur MySQL - uniquement au démon SSH! Mais l'API client MySQL est pas conçu pour «voir» la différence!

Référez-vous this .

0
Ashwin A

J'ai reçu une erreur similaire lors d'une tentative de connexion à mon serveur MySQL à distance via un utilisateur disposant des autorisations suffisantes.

Après avoir modifié le fichier /etc/mysql/my.cnf à inclure

[mysqld]
bind-address=xx.xx.xxx.xxx

où xx.xx.xxx.xxx est mon adresse IP locale, j'ai commencé à rencontrer exactement la même erreur que vous. À partir de là, j'ai trouvé une réponse à ce problème (résolu par Coffee Converter) qui fonctionnait pour moi et qui se trouve ici: Perte de connexion au serveur MySQL à "lecture du paquet de communication initial", erreur système: 0 sur une machine Windows

Tout ce que j’ai fait pour résoudre le problème, c’est de modifier le fichier /etc/hosts.allow afin d’y inclure

mysqld: ALL: allow

Fonctionne très bien maintenant! J'espère que cela a aidé :)

0
Faisal Naqaweh

Possibilité: votre base de données est corrompue.

J'ai rencontré cette situation lorsque j'exécutais une instruction UPDATE sur une ligne spécifique d'une table spécifique. (Plus précisément, je modifiais un élément sur un site d'administration Django.) La plupart du temps, la base de données fonctionnait parfaitement.

J'ai finalement résolu le problème en exécutant:

OPTIMIZE TABLE `your_table`

Après cela, tout était OK, pas de connexion perdue.

Conclusion:

Le problème "Lost connection to MySQL server at 'reading initial communication packet'", parfois "Can't connect to MySQL server on '127.0.0.1'", pourrait éventuellement être résolu en exécutant une optimisation complète de la base de données si celle-ci est corrompue. Pour plus d'informations, lisez ceci .

0
Rockallite