Назад | Перейти на главную страницу

Total newb, имеющий проблемы с туннелем SSH и удаленным доступом к MySQL

Я не часто работаю с Linux или мне нужен SSH-туннель в удаленные базы данных MySQL, так что извините за мое незнание. Я использую Windows 7, и мне нужно подключиться к удаленному экземпляру MySQL на сервере Linux.

В течение нескольких месяцев я успешно использовал клиентское приложение HeidiSQL. Сегодня произошло две вещи: БД переместилась на новый сервер, и я обновил HeidiSQL, теперь я не могу войти на сервер MySQL, при попытке я получаю это сообщение от Хайди:

SQL Error (2003) in statement #0: Can't connect to MySQL server on 'localhost' (10061)

Если я использую Putty, я могу подключиться к серверу и получить доступ к MySQL через командную строку, включая получение данных из БД. Я предполагаю, что это означает, что мои учетные данные и адрес верны, но я не понимаю, почему включение этих же данных в информацию о туннеле SSH HeidiSQL не сработает. Я также загрузил MySQL Workbench и попытался установить соединение через этого клиента и получил следующее сообщение:

Cannot Connect to Database Server

Your connection attempt failed for user 'myusername' from your host to server at localhost:3306:
Lost connection to MySQL server at 'reading initial communication packet', system error: 0

Please:
1 Check that mysql is running on server localhost
2 Check that mysql is running on port 3306 (note: 3306 is the default, but this can be changed)
3 Check the myusername has rights to connect to localhost from your address (mysql rights define what clients can connect to the server and from which machines) 
4 Make sure you are both providing a password if needed and using the correct password for localhost connecting from the host address you're connecting from

Из Googling вокруг я вижу, что это может быть связано с адресом привязки MySQL, но я сторонний субподрядчик без доступа к настройкам MySQL этого окна, и системный администратор уверяет меня, что я идиот и нужно понять это с моей стороны. Это вполне возможно, но я не знаю, что еще попробовать.

Изменить 1 - настройки клиента, которые я использую

В Heidi и MySQL Workbench я использую следующее:

SSH хост + порт: theHostnameOfTheRemoteServer.com:22 {это тот же хост, на который я могу Putty}

Имя пользователя SSH: mySSHusername {то же имя пользователя, которое я использую для подключения к Putty}

Пароль SSH: mySSHpassword {тот же пароль для подключения Putty}

Локальный порт: 3307 {это находится на вкладке настроек SSH и по умолчанию Хайди установила 3307, изменение на 3306 дает мне другую ошибку: Ошибка SQL (1045) в инструкции № 0: Доступ запрещен для пользователя mySQLusername @ localhost (с использованием пароль: ДА) "}

Хост MySQL: theHostnameOfTheRemoteServer.com {консенсус кажется, что я должен использовать здесь 'localhost'}

Пользователь MySQL: mySQLusername {к которому я могу подключиться один раз с помощью Putty}

Пароль MySQL: mySQLpassword {один раз работает с Putty}

Порт: 3306

Сначала убедитесь, что bind-address= в /etc/my.conf, под [mysqld], устанавливается на новый IP-адрес сервера.

Во-вторых, вам необходимо убедиться, что у вашего пользователя по-прежнему есть доступ для удаленного подключения к MySQL с любого IP-адреса, с которого вы пытаетесь подключиться удаленно.

Выполните следующий запрос из командной строки MySQL, где «username» - это имя пользователя, под которым вы пытаетесь войти, а «ipaddress» - это IP-адрес, с которого вы пытаетесь подключиться.

SHOW GRANTS FOR 'username'@'ipaddress';

Если вы не получили никаких допустимых результатов из вышеуказанного запроса, вам необходимо предоставить доступ вашему пользователю по IP-адресу, с которого вы пытаетесь подключиться удаленно. Вы можете сделать это, выполнив запрос, подобный приведенному ниже.

GRANT ALL PRIVILGES TO 'username'@'ipaddress' IDENTIFIED BY 'yourpassword';

Также убедитесь, что вы подключаетесь к правильному порту, установленному в /etc/my.cnf. Если это явно не установлено port= в my.cnf, то он использует порт по умолчанию 3306. Вы также можете проверить порт, на котором работает MySQL, в командной строке MySQL, выполнив запрос ниже.

SHOW VARIABLES LIKE 'port';

Хост MySQL при использовании SSH - localhost. Итак, это:

Хост MySQL: theHostnameOfTheRemoteServer.com

Должно быть так:

Хост MySQL: localhost

Помните, что когда вы используете SSH-туннель во что-либо, удаленный хост является только фактором первоначального SSH-соединения. В прошлом вы, по сути, находились «на сервере», поэтому теперь вы находитесь в области, где вы действительно можете подключиться к «localhost».

РЕДАКТИРОВАТЬ: Кроме того, я не понимаю, какое значение имеет установка локального порта на 3307:

Локальный порт: 3307

Это должно быть 3306, если явно где-то не изменились какие-то настройки.

Локальный порт: 3306

Если при использовании 3306 вместо 3307 вы можете установить соединение, но выдает ошибку учетных данных, вы ближе к входу в систему, чем раньше! Также были случаи, когда я не мог подключиться к MySQL через localhost по нечетным причинам, поэтому я бы подключился с IP-адресом 127.0.0.1

Хост MySQL: 127.0.0.1

Попробуйте это и посмотрите, что произойдет.

Вы уверены, что правильно настроили свой клиент, чтобы указывать на новый сервер? На основании этих ошибок:

Не удается подключиться к серверу MySQL на локальном хосте

...

с вашего хоста на сервер по адресу localhost: 3306

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

mysql -h имя-нового-сервера -u имя-пользователя

Если это сработает, вам будет предложено ввести пароль. Затем вернитесь к своим клиентам с графическим интерфейсом и проверьте настройки конфигурации.

В противном случае убедитесь, что вы можете получить доступ к хосту и что mysql фактически прослушивает порт 3306 на этом хосте:

ping -c 4 имя нового сервера

telnet newservername 3306

Если ping не удается, проверьте с помощью вашего дружелюбного системного администратора, чтобы убедиться, 1) хост работает, и 2) пакеты ICMP не заблокированы. ping может завершиться ошибкой из-за правил брандмауэра.

Если хост есть, но вы не можете подключиться по Telnet к 3306, значит, либо этот порт ограничен, либо служба не работает. Опять же, уточните у дружелюбного коллеги. HTH!

ваш клиент heidi mysql пытается подключиться к "localhost", а не к удаленному mysq.

замените адрес сервера в конфигурации heidi на IP-адрес или имя хоста, которое вы указали в своем клиенте шпатлевки при запуске оболочки.

системный администратор уверяет меня, что я идиот и мне нужно разобраться в этом

1o1

Попробуйте изменить настройки следующим образом:

...

Местный порт: 3307

Хост MySQL: localhost

...

Порт: 3306

Используйте нестандартные порты, поэтому, если вы запускаете экземпляр MySQL на своем локальном компьютере, мы уверены, что вы не подключаетесь к нему. Я не знаю HeidiSQL, но думаю, он будет туннелировать на порт по умолчанию на удаленном сервере.

Итак, в этом случае я смог заставить системного администратора вернуться и перепроверить, и в конце концов это оказались разрешения, но я искренне благодарю всех, кто помог мне исчерпать мои собственные поиски неисправностей, чтобы я мог вернуться к нему довольно уверенно проблема была не на моей стороне.