Я попытался создать туннель 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)")
Как я могу убедиться, что я ' на правильном хосте, а не просто проблема с привязкой?
Попробуйте изменить "localhost"
на "127.0.0.1"
, все должно работать так, как вы ожидаете. Это поведение подробно описано в руководстве:
Сокеты UNIX и именованные каналы не работать по сети, так что если указать хост, отличный от localhost, TCP будет использоваться, и вы можете указать нечетное порт, если вам нужно (порт по умолчанию 3306):
db=_mysql.connect(host="outhouse", port=3307, passwd="moonpie", db="thangs")
Если вам действительно нужно, вы можете подключиться к локальному хосту с помощью TCP указав полное имя хоста, или 127.0.0.1.
Выполняется ли mysqld на порту 22 на удаленном компьютере? Назовите меня неосведомленным, но я думаю, что вы пытаетесь сделать
ssh -n -N -f -L 3306:localhost:3306 remotehost
Затем создание соединений MySQL на локальной машине будет прозрачно туннелироваться на целевой хост.
Вы не можете указать localhost
в качестве имени хоста, так как это предполагает, что MySQLdb должен попытаться использовать сокет UNIX. Вместо этого используйте 127.0.0.1
для хоста.
Если вы хотите убедиться, что соединение работает, вы можете использовать стандартный клиент mysql.