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

17

Я попытался создать туннель SSH, используя

ssh -L 3306:localhost:22 <hostip>

Затем запустите мой скрипт python для подключения через localhost

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)")

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

    
задан John Giotta 26.08.2010 в 19:06
источник

3 ответа

16

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

    
ответ дан Tarantula 26.08.2010 в 19:13
  • Вот и все. благодаря –  John Giotta 26.08.2010 в 19:55
11

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

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

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

    
ответ дан Novikov 26.08.2010 в 19:16
  • Да, и вы можете проверить его, если у вас есть клиент telnet, доступный на локальном хосте: telnet localhost 3306 должен установить соединение и отобразить узнаваемый номер версии MySQL. –  Ned Deily 26.08.2010 в 19:22
  • Вы были правы, полагая, что у меня был неправильный порт. –  John Giotta 26.08.2010 в 19:55
  • Я думаю, что этот ответ лучше выбранного, потому что предлагаемый способ позволяет оставаться на вашей локальной машине, а не дистанционно. –  Gerhard Hagerer 14.07.2015 в 11:26
3

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

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

    
ответ дан Michael Mior 26.08.2010 в 19:08