Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SSH Tunnel for Python MySQLdb connection

Tags:

python

mysql

ssh

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?

like image 920
John Giotta Avatar asked Aug 26 '10 17:08

John Giotta


People also ask

Does MySQLdb work with python3?

MySQLdb module, a popular interface with MySQL is not compatible with Python 3.


2 Answers

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.

like image 89
Tarantula Avatar answered Oct 15 '22 15:10

Tarantula


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.

like image 13
Novikov Avatar answered Oct 15 '22 13:10

Novikov