Я пытался найти проблему, но пока не нашел в моем RHEL Server 7.5(Maipo)
. У меня есть удаленный экземпляр базы данных (экземпляр RDS) на моем AWS. Которая находится в той же общедоступной подсети. И может быть доступен и подключен, если я запустил mysql -h <remote-db-hostname> -u <username> -p
в моем вышеупомянутом терминале экземпляра.
Более того, если я пытаюсь запустить sudo telnet <remote-db-hostname> 3306
, он возвращает успех и говорит: «подключен к xxxx.xxx. Host».
Установлено yum
пакетов:
php-mysql.x86_64
(5.4.16-45.el7)mariadb.x86_64
(1: 5.5.56-2.el7)mariadb-libs.x86_64
(1: 5.5.56-2.el7)httpd.x86_64
(2.4.6-80.el7_5.1)httpd-tools.x86_64
(2.4.6-80.el7_5.1)
Соединение PHP не работает
Но когда я пытаюсь подключиться с помощью простого кода PHP, это не работает. В нем говорится: Ошибка подключения к базе данных (2): не удалось подключиться к MySQL. или Не удалось подключиться к хосту: не удалось подключиться к серверу MySQL на 'xxxx.eu-west-2.rds .amazonaws.com '(13)
Я пытался использовать имя хоста обоими способами, с портом и без порта, но безуспешно.
Тестовый файл подключения:
$host = 'remote-db-hostname:3306'; // ofcourse using correct hostname
$user = 'xxxxx';
$pswd = 'xxxxx';
$link = mysql_connect($host, $user, $pswd);
if (!$link) {
die('Could not connect host: ' . mysql_error());
}
mysql_select_db('my-db-name', $link) or die('could not connect to the specified database');
mysql_close($link);
Вот мой /etc/my.cnf
файл:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
Примечание. В /etc/my.cnf.d
есть два файла; 1) client.cnf
2) mysql-clients.cnf
client.cnf
# These two groups are read by the client library
# Use it for options that affect all clients, but not the server
[client]
# This group is not read by mysql client library,
# If you use the same .cnf file for MySQL and MariaDB,
# use it for MariaDB-only client options
[client-mariadb]
mysql-clients.cnf
# These groups are read by MariaDB command-line tools
# Use it for options that affect only one utility
#
[mysql]
[mysql_upgrade]
[mysqladmin]
[mysqlbinlog]
[mysqlcheck]
[mysqldump]
[mysqlimport]
[mysqlshow]
[mysqlslap]
/ etc / selinux / config:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
/etc/my.cnf.d
? - person Don't Panic   schedule 18.07.2018mysql_connect()
устарел, и вам следует не используйте это. Используйтеmysqli_connect()
или _ 3_. - person Don't Panic   schedule 18.07.2018setsebool -P httpd_can_network_connect=1
, и он сработал как шарм. Последнее уточнение; не лучше ли вместо этого использоватьsetsebool -P httpd_can_network_connect_db on
? Значит, мы разрешаем подключаться только к БД, а не каким-либо другим способом к любой другой машине? - person Nah   schedule 18.07.2018