用于Python MySQLdb连接的SSH隧道

时间:2010-08-26 17:06:14

标签: python mysql ssh

我尝试使用

创建SSH隧道
ssh -L 3306:localhost:22 <hostip>

然后运行我的python脚本通过localhost连接

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)")

如何确保我能够使用正确的主机,而不仅仅是绑定问题?

3 个答案:

答案 0 :(得分:17)

尝试将"localhost"更改为"127.0.0.1",它应该按预期工作。 manual

中详细介绍了此行为
  

UNIX套接字和命名管道没有   通过网络工作,所以如果你指定   TCP将会是localhost以外的主机   使用,你可以指定一个奇数   如果需要端口(默认端口   是3306):

     

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

     

如果你真的不得不,你可以   使用TCP连接到本地主机   指定完整的主机名,或   的 127.0.0.1

答案 1 :(得分:13)

mysqld是否在远程端口22上运行?叫我无知,但我认为你要做的是

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

然后在本地计算机上建立MySQL连接将透明地通过隧道传输到目标主机。

答案 2 :(得分:3)

您不能将localhost指定为主机名,因为这表明MySQLdb应该尝试使用UNIX套接字。请改为使用127.0.0.1作为主机。

如果要确保连接正常,可以使用标准的mysql客户端。