PHP удалённое подключение к MySQL

232
22 июня 2019, 15:40

положил страницу с вот таким php скриптом на удалённый хостинг.

$link = new mysqli('192.168.1.66', 'root', 'пароль', 'mainDB');
if ($link->connect_error) die("Ошибка: " . $link->connect_error);
$result = $link->query("SELECT sensorValue FROM sensors WHERE id=1;");
$row = $result->fetch_assoc();
echo (row['sensorValue']);

если обратиться по этому ip в браузере вижу свою страничку "It works!" из апача.

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

не понимаю почему не могу подключиться к своей БД удалённо.

на страницу выводится следующее:

Warning: mysqli::__construct(): (HY000/2002): Connection timed out in /storage/ssd1/482/8221482/public_html/index.php on line 12
Ошибка: Connection timed out

P.S строка 12 соответствует первой в этом вопросе; у меня Ubuntu 18.04

ПК подключен к сети через wi-fi роутер, провайдер Билайн

Answer 1

Разобрался.
Проблема фактически заключалась в том, что не мог найти белый IP по которому можно было бы обратиться к моему компьютеру извне.

нашёл локальный IP моего ПК внутри своей домашней сети, нашёл IP роутера внутри сети от свича, нашёл даже IP свича, но он тоже оказался в диапазоне локальных

а виной всему один белый IP для множества клиентов Билайна (у меня просто не было выделенного IP). подключил услугу постоянный ip, выделили мне свой отдельный никем больше не используемый ip адрес. он же определился как внешний по отношению к роутеру. и вот он уже белый) соответственно после проведения некоторых манипуляций по настройке прав доступа к моей базе данных и указания в скрипте нового ip всё прекрасно заработало

Answer 2

То, что вы видите в браузере страничку "It works!", ничего не говорит о доступности MySQL из вне. Страничка генерируется web-сервером (Apache, Nginx или др.) на 80 порту. MySQL-сервер, скорее всего, расположен на порту 3306 и через браузер вы к нему подключиться никак не сможете, даже если укажете порт в строке ввода URL, так как MySQL сервер использует другой протокол передачи данных.

Вы можете проверить есть ли подключение к БД с помощью терминала и команды Telnet:

telnet 94.130.120.65 3306

Если подключение будет удачно - на экране отобразятся строки с "крокозяблами", среди которых будет слово "MySQL".

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

READ ALSO
Sumfony console, как читать stdin

Sumfony console, как читать stdin

Пишу простое консольное приложение с командами на основе классов Symfony\Component\Console\Command\Command

167
Internal Server Error при вызове in_array

Internal Server Error при вызове in_array

Кто-нибудь сталкивался с проблемой, когда вызов in_array на большом массиве (500 000 элементов) выдает internal Server Error? Вызывается внутри перебора RecursiveIteratorIterator...

169
htaccess wordpress

htaccess wordpress

Всем добрый день ,нужно помощь первый раз сталкиваюсь с такой проблемой У меня на WP имеется страница: http://mysiteru/blog/?category=news После равно может...

174
Почему не приходят письма на ящики mail.ru?

Почему не приходят письма на ящики mail.ru?

Сайт на JoomlaОтправка своя на php

165