2009-11-24 3 views
5

Es gab ähnliche Fragen zu StackOverflow darüber, aber ich habe nicht die gleiche Situation gefunden. Dies ist auf einem OS X Leopard Maschine MySQLWeird MySQL Python mod_wsgi Kann keine Verbindung zum MySQL Server auf 'localhost' (49) Problem

etwas Ausgangs Informationen:

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

mysqladmin hat auch als OFF

ich in der Lage bin zu verbinden mysql aus der Python-Kommandozeile angezeigt skip-networking . Aber wenn ich versuche, es durch mod_wsgi zu tun Code verwenden, die Kopie ist und eingefügt oder über Django Ich erhalte die generische Verbindung Weigerung

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

ich im MySQL-Handbuch haben gesucht und versucht, seine Tipps zur Fehlerbehebung wie

telnet localhost 3306 

und ich tun erhalten Sie eine Verbindung.

Ich bin nicht versuchen, als root, entweder zu verbinden.

Irgendwelche Ideen, was ich noch überprüfen könnte? Vielen Dank im Voraus!

Antwort

0

Nicht zu viel da draußen auf diesem. aber nur eine zufällige Vermutung versuchen Sie es mit:

DATABASE_HOST = 'localhost' statt 127.0.0.1

und/oder versuchen, in Ihrer my.ini Kommentierung aus:

bind-Adresse 127.0.0.1

einen Versuch wert.

0

Bit seltsam, dass die Telnet-Verbindung funktioniert. Vielleicht einige weitere Möglichkeiten zur Problemaufnahme:

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

Ich würde zuerst die Localhost-Schnittstelle überprüfen, überprüfen, ob es IPv4-Adresse hat. Weit gefehlt vielleicht, aber ich hatte Probleme, als ich IPv6 aktiviert habe.

shell> ifconfig lo0 

Vielleicht ist die Namensauflösung funktioniert nicht richtig aus Apache/mod_wsgi/etc ..

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

Vielleicht Sie gehen (was ich zu Django beigetragen) zu erhalten versuchen, den Unix-Socket in Django , funktioniert es den Datenbank-Host auf den Pfad (Start mit Schrägstrich) Einstellung:

DATABASE_HOST = '/tmp/mysql.sock' 

Oder wo auch immer Ihre Socket-Datei ist.

Zuletzt, überprüfen Sie das MySQL-Fehlerprotokoll, wenn irgendwelche seltsame Nachrichten, wie es nicht an die IP-Adresse oder den Port binden.

Hoffe das hilft ein bisschen.

10

Ich stieß auf diesen Fehler und es war aufgrund einer SELinux-Verweigerung./ Usr/bin/httpd nicht Erlaubnis 3306. zum Port verbinden haben korrigierte ich das Problem mit:

setsebool httpd_can_network_connect_db on 

scheint sehr gut zu funktionieren und sicherer sein sollte als SELinux nur deaktivieren. Wie Avinash Meetoo unten weist darauf hin, können Sie verwenden:

setsebool -P httpd_can_network_connect_db 

die selinux Änderung Neustart beibehalten zu machen.

+1

Vielen Dank. Ich verwende MySQL auf CentOS Linux 6, wobei SELinux im Enforcing-Modus läuft. Das Setsebool hat das Problem perfekt gelöst. –

+0

'setsebool -P httpd_can_network_connect_db on' ist sogar noch besser, da es persistent ist. Ohne '-P' bleibt die setsebool nicht über Neustarts hinweg bestehen. –

1

Ich war genau die gleiche Fehlermeldung in Django bekommen:

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

es zu beheben, hatte ich den MySQL-Port 3306 in der django Einstellungsdatei explizit festgelegt.

Verwandte Themen