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-адресу локального хоста.