SQLSTATE[HY000] [2003] Невозможно подключиться к серверу MySQL на «127.0.0.1» (13), но «localhost» работает

SQLSTATE[HY000] [2003] Невозможно подключиться к серверу MySQL на «127.0.0.1» (13), но «localhost» работает

Cent os Apache + php + MySQL из php при попытке подключения к MySQL по адресу 127.0.0.1 возникает ошибка. Если заменить строку 127.0.0.1на localhostвсе работает без проблем. Проблема только с php в браузере. Если в консоли выполнить

php -r "var_dump (mysqli_connect ( '127.0.0.1', 'user', 'pass', 'db_name'))"

нет ошибки. Также, если консоль ввести

mysql -u user -h 127.0.0.1 -p db_name

или

mysql -u user -h localhost -p db_name

тоже все работает. В чем может быть проблема?

Версии программного обеспечения

  • PHP-5.6.26
  • MySQL-5.5.53
  • Апач 2.2.15

Окончательно,

$ host localhost
localhost has address 127.0.0.1

Рабочий PHP-код:

$dsn = 'mysql:dbname=testdb;host=localhost';
$user = 'dbuser';
$password = 'dbpass';

try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

PHP-код не работает:

$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
    $user = 'dbuser';
    $password = 'dbpass';

    try {
        $dbh = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }

SQLSTATE[HY000] [2003] Невозможно подключиться к серверу MySQL на «127.0.0.1» (13)

Рабочий PHP-код:

$link = mysqli_connect("localhost", "my_user", "my_password", "my_db");

PHP-код не работает:

$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");

решение:

setsebool httpd_can_network_connect_db on

решение1

В соответствии сэтот (непринятый) ответ на StackOverflow, причина в том, что MySQL интерпретирует localhostпо-другому 127.0.0.1. Этоподтверждено в документации, см. абзац, начинающийся с "В Unix программы MySQL обрабатывают имя хоста localhostособым образом.".

  • Это 127.0.0.1явный адрес IPv4, поэтому клиент пытается подключиться по протоколу TCP/IP.
  • Это localhostнеявный намек на использование локального хоста, который MySQL реализует, где это возможно, через локальный сокет, а не через TCP/IP.

Поскольку ваше localhostсоединение работает, а 127.0.0.1другое — нет, возможно, что причиной является одна из следующих проблем:

  • Ваши разрешения базы данных запрещают подключение из127.0.0.1
  • у вас есть правило брандмауэра, блокирующее все попытки входящего подключения к базе данных по протоколу TCP/IP
  • вы изменили bindзапись конфигурации для MySQL, так что она не привязывается к адресу обратной связи

Учитывая код ошибки 13 (доступ запрещен), я бы исследовал первый из них прежде, чем остальные два.

Связанный контент