Туннель SSH для соединения Python MySQLdb

Я попытался создать туннель 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)")

Как я могу убедиться, что я ' на правильном хосте, а не просто проблема с привязкой?

19
задан John Giotta 26 August 2010 в 17:06
поделиться

3 ответа

Попробуйте изменить "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.

17
ответ дан 30 November 2019 в 03:52
поделиться

Выполняется ли mysqld на порту 22 на удаленном компьютере? Назовите меня неосведомленным, но я думаю, что вы пытаетесь сделать

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

Затем создание соединений MySQL на локальной машине будет прозрачно туннелироваться на целевой хост.

13
ответ дан 30 November 2019 в 03:52
поделиться

Вы не можете указать localhost в качестве имени хоста, так как это предполагает, что MySQLdb должен попытаться использовать сокет UNIX. Вместо этого используйте 127.0.0.1 для хоста.

Если вы хотите убедиться, что соединение работает, вы можете использовать стандартный клиент mysql.

3
ответ дан 30 November 2019 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: