2009-11-24 5 views
5

Il y a eu des questions similaires sur StackOverflow à ce sujet, mais je n'ai pas trouvé la même situation. Ceci est un OS X machine Leopard en utilisant MySQLBizarre MySQL Python mod_wsgi Impossible de se connecter au serveur MySQL sur 'localhost' (49) problème

Quelques informations à partir:

MySQL Server version  5.1.30 
Apache/2.2.13 (Unix) 
Python 2.5.1 
mod_wsgi 3 

mysqladmin a également skip-networking classé OFF

Je suis en mesure de se connecter à mysql à partir de la ligne de commande python . Mais lorsque je tente de le faire par mod_wsgi en utilisant le code qui copie et collé ou via Django, je reçois le refus de connexion générique

OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (49)") 

J'ai regardé le manuel mysql et essayé ses conseils de dépannage tels que

et I de faire obtenir une connexion.

Je suis et non en essayant de me connecter en tant que root.

Des idées sur quoi d'autre que je pourrais vérifier? Merci d'avance!

Répondre

0

Pas trop sur le marché. Juste une supposition aléatoire mais essayez d'utiliser:

DATABASE_HOST = 'localhost' au lieu de 127.0.0.1

et/ou essayer de commenter dans votre my.ini:

bind-address 127.0.0.1

vaut le coup d'œil.

0

Bit impair que la connexion telnet fonctionne. Peut-être quelques façons de tir Troublé:

shell> perror 49 
OS error code 49: Can't assign requested address 

Je vérifierais l'interface localhost d'abord, vérifiez si elle a l'adresse IPv4. Peut-être allé chercher, mais j'ai eu des problèmes quand j'ai fait IPv6.

shell> ifconfig lo0 

Peut-être que la résolution de nom ne fonctionne pas correctement à l'intérieur d'Apache/mod_wsgi/etc ..

import python 
print socket.gethostbyname('localhost') 
print socket.gethostbyaddr('127.0.0.1') 

Peut-être pour vous aider à aller (quelque chose que je contribuais à Django) essayez le Socket UNIX dans Django , il fonctionne le réglage de la base de données hôte sur le chemin (en commençant par l'avant-slash):

DATABASE_HOST = '/tmp/mysql.sock' 

ou si jamais votre fichier socket est. Enfin, vérifiez le journal des erreurs de MySQL s'il y a des messages bizarres, comme s'il n'arrivait pas à se lier sur l'adresse IP ou le port.

Espérons que cela aide un peu.

10

Je suis tombé sur cette erreur et c'était dû à un déni de SELinux./ Usr/bin/httpd n'a pas eu la permission de se connecter au port 3306. Je corrigé le problème avec:

setsebool httpd_can_network_connect_db on 

semble fonctionner à merveille et devrait être plus sûr que de désactiver SELinux. Comme Avinash Meetoo indique ci-dessous, vous pouvez utiliser:

setsebool -P httpd_can_network_connect_db 

Pour faire le changement de SELinux persistent entre les redémarrages.

+1

Merci beaucoup. J'utilise MySQL sur CentOS Linux 6 avec SELinux fonctionnant en mode Enforcing. Le setsebool a résolu le problème parfaitement. –

+0

'setsebool -P httpd_can_network_connect_db on' est encore meilleur car il est persistant. Sans '-P', le setsebool ne persiste pas lors des redémarrages. –

1

Je recevais le message exact même erreur dans Django:

OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (49)") 

Pour résoudre ce problème, je devais définir explicitement le port mysql à 3306 dans le fichier des paramètres de django.

Questions connexes