У меня есть стек 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) Сервер не отвечает (или сокет локального сервера настроен неправильно).
Я не знаю, почему говорится о попытке подключиться к местный server, поскольку я настроил только один сервер (и он удаленный).
Если я tcpdump, я вижу, что он не пытается установить соединение с указанным мной IP.
Как будто мой файл конфигурации игнорируется.
Есть ли способ включить дополнительную отладочную информацию? Любые предложения приветствуются!
Я решил проблему. Действительно, мой файл конфигурации игнорировался. Я копировал 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
Я столкнулся с другой причиной, по которой вы можете получить эту ошибку. Вам необходимо выполнить следующие условия
Как описано в эта ошибка 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;