Я не часто работаю с 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, но думаю, он будет туннелировать на порт по умолчанию на удаленном сервере.
Итак, в этом случае я смог заставить системного администратора вернуться и перепроверить, и в конце концов это оказались разрешения, но я искренне благодарю всех, кто помог мне исчерпать мои собственные поиски неисправностей, чтобы я мог вернуться к нему довольно уверенно проблема была не на моей стороне.