PHP - не удается подключиться к удаленной базе данных MySQL

У меня есть база данных MySQL, размещенная мной на сервере Windows, и я хотел бы запросить ее с удаленного веб-сервера. Когда я пытаюсь подключиться к базе данных MySQL с помощью PHP (я знаю, я должен использовать mysqli):

$connection = @mysql_connect("203.0.113.0:3306", "username", "password");

С указанием или без указания порта, после долгого времени загрузки я получаю эту ошибку с errorno 2003 года:

Не удается подключиться к серверу MySQL на 203.0.113.0 (4)

Вот что я получаю, когда бегу netstat -n в командной строке на сервере, на котором размещен сервер MySQL: http://pastebin.com/pbRJNqCZ. Он заполнил экран, поэтому я не мог скопировать все, но я знаю, что все остальное было (я видел пару портов со значением 3306, которое является портом MySQL):

TCP    127.0.0.1:port        127.0.0.1:port        ESTABLISHED

Когда я бегу netstat -a | find "LISTENING" Я получаю: http://pastebin.com/Lqj2BrQK

Вот что я знаю до сих пор:

  • Это не ошибка, когда сервер MySQL не работает, потому что я могу подключиться к нему локально.
  • Это не ошибка, когда веб-сервер не может подключиться к базам данных MySQL, потому что я могу подключиться к другим базам данных
  • Это не ошибка аутентификации (имя пользователя и пароль верны, а удаленный сервер имеет разрешение)
  • Это не ошибка переадресации порта, потому что порт 3306 поддерживается как по TCP, так и по UDP.
  • Это не ошибка, поскольку я могу подключиться к машине, на которой размещен сервер, потому что я могу нормально пропинговать его.
  • Сервер не только прослушивает интерфейс localhost. skip-networking а также bind-address закомментированы в моем my.cnf файл.

Как я могу отредактировать мой код подключения или мой сервер MySQL, чтобы исправить эту ошибку?

1 ответ

Решение

Подводя итоги нашего обсуждения / чата:

Свяжите сетевой адрес 0.0.0.0 в my.cnf: bind-address = 0.0.0.0 и обеспечить skip-networking закомментирован или отсутствует.

Проверьте netstat -a | find "LISTENING"

В соответствии с вашей вставкой существует служба, которая прослушивает 3306. Проверьте, доступен ли порт по адресу сетевой карты от самого сервера. Таким образом, внешний брандмауэр не действует. Простым тестом является попытка подключения через telnet к этому порту. Более подробную информацию можно отловить инструментом nmap, Nmap отображает порт mysql как отфильтрованный. Это приводит к проблеме с локальным фильтром пакетов, в данном случае брандмауэром Windows.

Убедитесь, что брандмауэр Windows настроен так, чтобы разрешить публичный доступ к TCP-порту 3306 со всех компьютеров или с определенного компьютера. Установите правило в общедоступном профиле или, если оба сервера управляются одним и тем же контроллером домена, в профиле домена. Когда доступ с локального компьютера будет успешным, попробуйте то же самое с удаленного веб-сервера.

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

Другие вопросы по тегам