Я использую CentOS 7 на всех серверах, упомянутых ниже.
I ' и через PHP модуль MySQL работает.
Вот права доступа к 192.168.1.167 (сервер БД)
+---------------------------------------------------------------------------------------------------------------+
| Grants for demouser@localhost |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'demouser'@'localhost' IDENTIFIED BY PASSWORD '*DB17DD535D122AED147A61C30CD5D01FB3BC5433' |
| GRANT ALL PRIVILEGES ON `demodb`.* TO 'demouser'@'localhost' |
+---------------------------------------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------------------------------------------+
| Grants for demouser@192.168.1.168 |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'demouser'@'192.168.1.168' IDENTIFIED BY PASSWORD '*DB17DD535D122AED147A61C30CD5D01FB3BC5433' |
| GRANT ALL PRIVILEGES ON `demodb`.* TO 'demouser'@'192.168.1.168' |
+-------------------------------------------------------------------------------------------------------------------+
netstat
на 192.168.1.167 показывает:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2892/mysqld
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1704/master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1053/sshd
Как я могу разрешить удаленное соединение MySQL через HTTP / PHP, но только для запросов, инициируемых с вышеупомянутого WEB-сервера?
Мне удалось определить, что SELinux
был причиной сбоя соединения.
Как упоминалось в исходном потоке, я отключил SELinux
и брандмауэр на сервере DB , который, как я полагал, блокировал удаленное соединение с сервером WEB .
Причиной проблемы с подключением был SELinux
на WEB сервер.
Я временно отключил его, используя setenforce 0
, чтобы установить его в разрешающий
режим.
Все работает.
Я повторно -enabled SELinux
и брандмауэр на сервере DB . Я все еще могу установить соединение с удаленной базой данных через скрипт PHP на WEB сервере.
Теперь я могу подтвердить, что проблема была на WEB сервере, инициирующем соединение.
Я повторно включил SELinux
на WEB сервере и использовал следующую команду, чтобы установить логическое значение для SELinux
на WEB сервере.
setsebool -P httpd_can_network_connect_db 1
В настоящее время у меня SELinux
активен на обоих серверах WEB и DB в принудительном режиме
, и удаленное соединение MySQL все еще может успешно пройти.
В других обсуждениях, за которыми я не следил, я читал: на каком сервере настраивать логические значения SELinux
.
Надеюсь на это. эта ветка может помочь сэкономить время всем, кто сталкивается с той же проблемой, что и я.