Python MySQLdb连接的SSH隧道

19

我尝试使用SSH隧道进行连接。

ssh -L 3306:localhost:22 <hostip>

然后运行我的 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)")

我该如何确保我正在连接到正确的主机,而不是与绑定有关的问题?

您也可以尝试使用 sshtunnel 配方:https://github.com/pahaz/sshtunnel#example-3 - pahaz
3个回答

18
尝试将"localhost"更改为"127.0.0.1",它应该可以按您的期望工作。该行为在手册中有详细说明:
UNIX套接字和命名管道不能通过网络工作,因此,如果您指定了除localhost以外的主机,则会使用TCP,并且如果需要,可以指定奇怪的端口(默认端口为3306): db=_mysql.connect(host="outhouse", port=3307, passwd="moonpie", db="thangs") 如果确实必须这样做,您可以通过指定完整的主机名或127.0.0.1来使用TCP连接本地主机。

13

mysqld是否在远程的22端口运行?请原谅我的无知,但我认为你正在尝试做的是

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

在本地计算机上建立MySQL连接时,将会自动隧道连接到目标主机。


是的,如果您在本地主机上有telnet客户端,您可以测试它:telnet localhost 3306应该建立连接并显示可识别的MySQL版本号。 - Ned Deily
我认为这个答案比被选中的更好,因为提出的方法可以让你留在本地机器上而不是远程操作。 - Gerhard Hagerer

3

您不能将localhost用作主机名,因为这会暗示MySQLdb应尝试使用UNIX套接字。请改用127.0.0.1作为主机。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接