Le python de cette application s'exécute à partir d'un conteneur docker. Le conteneur fonctionne en mode réseau: "host".OSX El Capitan sqlalchemy Impossible de se connecter au serveur MySQL sur '127.0.0.1' (111)
J'ai des problèmes pour me connecter à une base de données MySQL via le paquet python sqlalchemy. Je reçois l'erreur suivante.
OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on '127.0.0.1' (111)") None None
utilisant la commande suivante fonctionne très bien
mysql -h 127.0.0.1 -u my_user --password='password' db -e "SHOW TABLES;"
enter code here
Peut-être que sqlalchemy n'utilise pas la configuration correcte, vous dites? Je l'ai imprimé la configuration dans une ligne de débogage juste avant la première connexion à MySQL:
print config.get('repository', 'host') // 127.0.0.1
print config.get('repository', 'user') // my_user
print config.get('repository', 'passwd') // password
Peut-être que la configuration est toujours pas en faire sqlalchemy? Permet d'imprimer la chaîne du moteur
engine = getUnaffiliatedEngine()
print engine //Engine(mysql://my_user:***@127.0.0.1:3306)
with engine.connect() as connection:
for s in statements:
if s.strip():
connection.execute(s)
Peut-être y a-t-il plus d'une version de mysql en cours d'exécution? Un seul processus est en cours d'exécution:
ps -ef | grep mysql
74 15459 1 0 10:14AM ?? 0:00.80 /usr/local/mysql/bin/mysqld --user=_mysql
Peut-être que l'utilisateur n'a pas accès à la base de données? De même, 'show databases' montre que la base de données existe. J'ai accordé tous les privilèges à cet utilisateur pour chaque base de données. J'ai aussi vidé les privs.
Peut-être qu'une sorte de règle de pare-feu arrête la connexion? J'utilise un petit vif, et tout le pare-feu a été démonté pour le tester.
Je ne sais même pas quoi d'autre à déboguer à ce stade. Voici une version réduite du script python jeter l'erreur de connexion:
DSN_FORMAT = "mysql://%(user)s:%(passwd)[email protected]%(host)s:%(port)s"
def getDSN():
return DSN_FORMAT % dict(config.items("repository"))
def getUnaffiliatedEngine():
return create_engine(getDSN())
def reset(offline=False):
config.loadConfig()
dbName = config.get('repository', 'db')
print config.get('repository', 'host')
print config.get('repository', 'user')
print config.get('repository', 'passwd')
resetDatabaseSQL = (
"DROP DATABASE IF EXISTS %(database)s; "
"CREATE DATABASE %(database)s;" % {"database": dbName})
statements = resetDatabaseSQL.split(";")
engine = getUnaffiliatedEngine()
print engine
with engine.connect() as connection:
for s in statements:
if s.strip():
connection.execute(s)
Voici la sortie pour tcpdump -i lo0 port 3306
:
11:44:41.224036 IP localhost.58797 > localhost.mysql: Flags [P.], seq 3915736486:3915736498, ack 2134634265, win 12519, options [nop,nop,TS val 980567261 ecr 980503692], length 12
11:44:41.224105 IP localhost.mysql > localhost.58797: Flags [.], ack 12, win 12737, options [nop,nop,TS val 980567261 ecr 980567261], length 0
11:44:41.224178 IP localhost.mysql > localhost.58797: Flags [P.], seq 1:19, ack 12, win 12737, options [nop,nop,TS val 980567261 ecr 980567261], length 18
11:44:41.224218 IP localhost.58797 > localhost.mysql: Flags [.], ack 19, win 12519, options [nop,nop,TS val 980567261 ecr 980567261], length 0
11:45:07.422776 IP localhost.58796 > localhost.mysql: Flags [P.], seq 2953728354:2953728366, ack 432872138, win 12483, options [nop,nop,TS val 980593366 ecr 980533534], length 12
11:45:07.422807 IP localhost.mysql > localhost.58796: Flags [.], ack 12, win 12729, options [nop,nop,TS val 980593366 ecr 980593366], length 0
11:45:07.422856 IP localhost.mysql > localhost.58796: Flags [P.], seq 1:19, ack 12, win 12729, options [nop,nop,TS val 980593366 ecr 980593366], length 18
11:45:07.422877 IP localhost.58796 > localhost.mysql: Flags [.], ack 19, win 12482, options [nop,nop,TS val 980593366 ecr 980593366], length 0
MySQL 5.6 OSX El Capitan 10.11.6
Pourriez-vous montrer le code réel qui donne l'erreur? Ou au moins une version réduite de celui-ci. –
Je suis d'accord avec @ gsi-frank - un exemple réduit avec juste le moteur SQLAlchemy simple et [configuration de la connexion (comme dans ses docs)] (http://docs.sqlalchemy.org/en/latest/core/connections.html# module-sqlalchemy.engine) serait utile ici (à la fois pour vous simplifier le débogage, et pour la question ici sur SO). –
@ gsi-frank done –