#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 /