RHEL не может подключить базу данных MySQL через код PHP

Я пытался найти проблему, но пока не нашел в моем 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

person Nah    schedule 18.07.2018    source источник
comment
Какие файлы конфигурации включены из /etc/my.cnf.d?   -  person Don't Panic    schedule 18.07.2018
comment
В нем есть два файла, эти имена указаны в моем обновленном вопросе. Я борюсь с этим со вчерашнего дня. Но не повезло.   -  person Nah    schedule 18.07.2018
comment
Имена на самом деле не имеют значения, конечно, имеет значение содержание.   -  person Don't Panic    schedule 18.07.2018
comment
Взгляните на это: stackoverflow.com/questions/4078205/   -  person LittleyLv    schedule 18.07.2018
comment
Из-за SE linux пользователь apache не может подключиться к удаленной базе данных. Попробуйте один раз после отключения SE Linux. Также перейдите по этому URL-адресу access.redhat.com/documentation/en-us/red_hat_enterprise_linux/   -  person SynapseIndia    schedule 18.07.2018
comment
Не имеет отношения к вашей проблеме, но mysql_connect() устарел, и вам следует не используйте это. Используйте mysqli_connect() или _ 3_.   -  person Don't Panic    schedule 18.07.2018
comment
Очень признателен за быструю помощь. Ты спас мне день. Запустите это setsebool -P httpd_can_network_connect=1, и он сработал как шарм. Последнее уточнение; не лучше ли вместо этого использовать setsebool -P httpd_can_network_connect_db on? Значит, мы разрешаем подключаться только к БД, а не каким-либо другим способом к любой другой машине?   -  person Nah    schedule 18.07.2018
comment
= 1 действительно означает On - Enable. И вы ЗНАЕТЕ, что это работает. Ссылка SynapseIndia указывает на то, что вам следует использовать пробел Вкл - очевидно, что возможно более одного способа.   -  person Wilson Hauck    schedule 18.07.2018