2010-08-26 19 views
17

Ich habe versucht, einen SSH-Tunnel zu schaffenSSH Tunnel für Python MySQLdb Verbindung

ssh -L 3306:localhost:22 <hostip> 

mit Dann ist mein Python-Skript ausgeführt wird über den Local Host

conn = MySQLdb.connect(host'localhost', port=3306, user='bob', passwd='na', db='test') 

jedoch zu verbinden, erhalte ich folgende Fehler

(2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)") 

Wie kann ich sicherstellen, dass ich den richtigen Host und nicht nur ein Problem mit der Bindung treffen?

Antwort

16

Versuchen Sie, "localhost" zu "127.0.0.1" zu ändern, sollte es funktionieren, wie Sie erwarten. Dieses Verhalten in der manual detailliert wird:

UNIX-Sockets und Named Pipes nicht Arbeit über ein Netzwerk, wenn Sie also ein Host andere als localhost angeben, wird TCP verwendet werden, und Sie können eine angeben ungerade Port, wenn Sie (der Standard-Port 3306) benötigen:

db=_mysql.connect(host="outhouse", port=3307, passwd="moonpie", db="thangs")

wenn Sie wirklich hatte, konnte man vonan den lokalen Host mit TCP verbinden 10 unter Angabe des vollständigen Hostnamens oder 127.0.0.1.

+1

Das hat es getan. Danke –

3

Sie können localhost nicht als Hostnamen angeben, da dies bedeutet, dass MySQLdb versuchen sollte, einen UNIX-Socket zu verwenden. Verwenden Sie stattdessen 127.0.0.1 für den Host.

Wenn Sie sicherstellen möchten, dass die Verbindung funktioniert, können Sie den Standard-MySQL-Client verwenden.

11

Läuft mysqld auf Port 22 auf der Fernbedienung? Rufen Sie mich unwissend, aber ich denke, was Sie versuchen

ssh -n -N -f -L 3306:localhost:3306 remotehost 

dann zu tun ist, macht MySQL-Verbindungen auf dem lokalen Rechner transparent auf dem Ziel-Host getunnelt über erhalten.

+0

Ja, und Sie können es testen, wenn Sie einen Telnet-Client auf dem lokalen Host haben: 'telnet localhost 3306' sollte eine Verbindung herstellen und eine erkennbare MySQL-Versionsnummer anzeigen. –

+0

Sie haben richtig angenommen, dass ich den falschen Port hatte. –

+0

Ich denke, diese Antwort ist besser als die gewählte, weil der vorgeschlagene Weg es ermöglicht, auf Ihrem lokalen Rechner zu bleiben, anstatt fern zu sein. –