tags:

views:

86

answers:

3

I tried creating a SSH tunnel using

ssh -L 3306:localhost:22 <hostip>

Then running my python script to connect via localhost

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

However, I receive the following error

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

How can I make sure I'm hitting the correct host and not just some problem with the bind?

+2  A: 

You can't specify localhost as the hostname, as this suggests that MySQLdb should try to use a UNIX socket. Use 127.0.0.1 for the host instead.

If you want to make sure the connection works, you can use the standard mysql client.

Michael Mior
+2  A: 

Try changing "localhost" to "127.0.0.1", it should work as you expect. This behavior is detailed in the manual:

UNIX sockets and named pipes don't work over a network, so if you specify a host other than localhost, TCP will be used, and you can specify an odd port if you need to (the default port is 3306):

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

If you really had to, you could connect to the local host with TCP by specifying the full host name, or 127.0.0.1.

Tarantula
That did it. Thanks
John Giotta
+3  A: 

Does mysqld run on port 22 on the remote? Call me ignorant but I think what you're trying to do is

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

Then making MySQL connections on local machine will transparently get tunneled over to the target host.

Novikov
Yes, and you can test it if you have a telnet client available on the local host: `telnet localhost 3306` should establish a connection and display a recognizable MySQL version number.
Ned Deily
You were correct in assuming I had the wrong port.
John Giotta