phpmyadmin не будет подключаться к удаленному экземпляру MySQL

У меня есть блок стека LAMP (CentOS 6) и еще один блок CentOS 6 под управлением сервера MySQL.

Я установил phpmyadmin на блок LAMP, но не могу заставить его общаться с моим блоком SQL вообще.

Я настроил следующее в config.inc.php

/* Servers configuration */
$i = 0;

/* Server: usp-ggdb2 [1] */
$i++;
$cfg['Servers'][$i]['verbose'] = 'usp-ggdb2';
$cfg['Servers'][$i]['host'] = '10.1.2.3';
$cfg['Servers'][$i]['port'] = '';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = '';
$cfg['Servers'][$i]['password'] = '';

Когда я захожу на сайт phpmyadmin, я получаю следующую ошибку:

# 2002 - Не удается подключиться к локальному серверу MySQL через сокет '/var/lib/mysql/mysql.sock' (2) Сервер не отвечает (или сокет локального сервера настроен неправильно).

Я не знаю, почему речь идет о попытке подключиться к локальному серверу, поскольку я настроил только один сервер (и он удаленный).

Если я tcpdump, я вижу, что он не пытается установить соединение с указанным IP.

Как будто мой конфигурационный файл игнорируется.

Есть ли способ включить больше отладочной информации? Любые предложения приветствуются!

3 ответа

Решение

Я решил проблему. Действительно, мой конфигурационный файл игнорировался. Я копировал config.inc.sample.php в config.inc.php в каталоге верхнего уровня веб-сайта (/var/www/html/pma).

Однако в CentOS 6 есть отдельный каталог конфигурации - /etc/phpMyAdmin/. Как только я скопировал туда свой конфиг, все работает нормально.

Одна из стандартных настроек RHEL 6 и CentOS 6 - SELinux по умолчанию в принудительном режиме. Вы можете проверить это с помощью getenforce команда.

Если в Enforcing mode самый быстрый способ проверить, является ли виновником SELinux частое временное отключение SELinux с помощью setenforce 0, Если с отключенным SELinux все работает как положено, это подтверждается.

Верните SELinux в принудительный режим с помощью setenforce 1 и установите политику, управляющую сетевым доступом к базе данных для веб-приложений, разрешенной:

   setsebool -P httpd_can_network_connect_db 1

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

  sesebool -P httpd_can_network_connect 1 

Я столкнулся с другой причиной, по которой вы можете получить эту ошибку. Вам необходимо выполнить следующие условия

  1. Используйте MySQL Native Driver для PHP (что рекомендуется)
  2. Используйте MySQL 5.6 или позже
  3. Используйте самоподписанный SSL-сертификат для связи MySQL

Как описано в этой ошибке PHP, MySQLND будет подчиняться предпочтениям MySQL и попытаться проверить сертификат SSL. Так как это не может (будучи самоподписанным), соединение просто терпит неудачу с ошибкой 2002 года (хороший и расплывчатый!)

Как отмечалось в ошибке, PHP 5.6.16 (также присутствует в 7.0+) добавил еще одну опцию подключения к mysqli_real_connect называется MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT, который отключает проверку сертификатов SSL на стороне MySQLND. Для версий до PMA 4.6.0 вам придется редактировать libraries/dbi/DBIMysqli.php и отредактируйте строку с помощью

$client_flags |= MYSQLI_CLIENT_SSL;

И заменить его на (ТОЛЬКО ДЛЯ PHP 5.6.16 или новее)

$client_flags |= MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT;

Для PMA 4.6.0 или новее вы можете просто установить в конфиге

$cfg['Servers'][$i]['ssl_verify'] = false;
Другие вопросы по тегам