2010-08-26 96 views
17

我試圖創建一個使用SSH隧道爲Python MySQLdb的連接

ssh -L 3306:localhost:22 <hostip> 

一個SSH隧道然後運行我的python腳本通過本地主機連接

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

不過,我收到以下錯誤

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

我如何確保我擊中了正確的主機,而不僅僅是綁定的一些問題?

回答

16

嘗試更改"localhost""127.0.0.1",它應該按照您的預期工作。這種行爲在manual詳細說明:

Unix套接字和命名管道不要 工作在網絡上,因此,如果指定 localhost以外的主機,TCP將 被使用,並且可以指定一個奇 端口,如果你需要(默認端口 爲3306):

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

如果你真正到了,你可以用 通過TCP連接到本地主機10指定完整主機名,或 127.0.0.1

+1

這樣做。謝謝 – 2010-08-26 17:55:22

3

您不能指定localhost作爲主機名,因爲這表明MySQLdb應該嘗試使用UNIX套接字。相反,使用127.0.0.1作爲主機。

如果你想確保連接有效,你可以使用標準的mysql客戶端。

11

mysqld是否在遠程端口22上運行?叫我無知,但我認爲你正在試圖做的是

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

然後讓本地機器上的MySQL連接將得到透明隧道到目標主機。

+0

是的,如果你在本地主機上有telnet客戶端,你可以測試它:'telnet localhost 3306'應該建立一個連接並顯示一個可識別的MySQL版本號。 – 2010-08-26 17:22:29

+0

你假設我錯了端口是正確的。 – 2010-08-26 17:55:01

+0

我認爲這個答案比選擇的更好,因爲建議的方式可以讓你保留在本地機器上而不是遠程。 – 2015-07-14 09:26:47