Тайм-аут удаленного соединения MySqli только при подключении через Apache2

#php #mysql #ubuntu #mysqli #mariadb

#php #mysql #ubuntu #mysqli #mariadb

Вопрос:

Я столкнулся с проблемой на Ubuntu 18.04, компьютере / сервере Apache EC2 — 172.2.27.1, что mysqli не подключается там к серверу MariaDB — 172.2.27.2 (удаленный сервер mysqli), но он подключается через localhost (поскольку в настоящее время на компьютере 172.2.27.1 также установлен MariaDB), также удаленное соединение с 172.2.27.2 устанавливается через терминал:

mysql -h 172.2.27.2 -u test -p (на компьютере 172.2.27.1)

Не удается понять, в чем может быть причина. Я пробовал отлаживать все возможные местоположения, но не смог найти ни одного.

При подключении к Apache выдает ошибку:

 Object
(
    [affected_rows] => 
    [client_info] => 
    [client_version] => 50012
    [connect_errno] => 2002
    [connect_error] => Connection timed out
    [errno] => 
    [error] => 
    [error_list] => 
    [field_count] => 
    [host_info] => 
    [info] => 
    [insert_id] => 
    [server_info] => 
    [server_version] => 
    [stat] => 
    [sqlstate] => 
    [protocol_version] => 
    [thread_id] => 
    [warning_count] => 
)
  

PS: Нет проблем с правилами брандмауэра ни на компьютере, ни на экземпляре EC2. Я уже проверил это. Весь доступный код для подключения к удаленному серверу MariaDB в Интернете дает тот же результат. Это не проблема с кодом, возможно, какая-то проблема с расширением apache или PHP. Сервер 172.2.27.1 не может подключиться к любому другому серверу MariaDB в Интернете. Он работает только на localhost, а не на чем-либо еще.

Комментарии:

1. Можете ли вы поделиться более подробной информацией? Что вы пытались отладить проблему, например: показать код, который вы используете? Показать попытки отладки?

2. Весь доступный код для подключения к удаленному серверу MariaDB в Интернете дает тот же результат. Это не проблема с кодом, возможно, какая-то проблема с расширением apache или PHP. Сервер 172.2.27.1 не может подключиться к любому другому серверу MariaDB в Интернете. Он работает только на localhost, а не на чем-либо еще.

3. Не могли бы вы поделиться, какую именно ошибку вы получаете, или поделиться скриншотом ошибки?

4. Вы пробовали с PDO?

5. Не могли бы вы, пожалуйста, проверить, правильно ли установлены IP-адреса базы данных и порт в коде?

Ответ №1:

Скорее всего, правила брандмауэра блокируют ваше соединение: (Время ожидания соединения истекло)

Проверьте, Security groups назначенный экземпляру Mysql / MariaDB, и убедитесь, что Mysql port (3306) правильно разрешено в настройке MariaDB принимать inbound соединения из 172.2.27.2 конкретной или из всей подсети.

Комментарии:

1. Там у меня разрешен весь трафик , и, следовательно, я могу подключить Mysql 172.2.27.2 через терминал на 172.2.27.1. Проблема только в том, что PHP-файл Apache не подключается.

2. PHP никоим образом не блокирует его. Apache выполняет исходящее соединение с вашим блоком Mysql, поэтому, если у вас нет каких-либо исходящих правил на конце EC2, которые блокируют исходящие соединения (в чем я сомневаюсь, поскольку они разрешены по умолчанию), но вы все равно можете проверить, я не вижу причин, по которым соединение должно быть заблокировано. Я также не знаю вашей точной настройки, поэтому с моей точки зрения это может быть трудно определить. Являются ли EC2 и Mysql одним и тем же VPC? Вы можете это подтвердить?

Ответ №2:

Похоже, вы не настроили свою базу данных для удаленного адреса. установите my.cnf

 [mysqld]
skip-networking=0
skip-bind-address
  

Затем установите mysql.user

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.2.27.%' 
  IDENTIFIED BY 'password' WITH GRANT OPTION;
  

После этого перезапустите все процессы
Посмотрите на это для справки:
https://mariadb.com/kb/en/configuring-mariadb-for-remote-client-access /