Назад | Перейти на главную страницу

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) Сервер не отвечает (или сокет локального сервера настроен неправильно).

Я не знаю, почему говорится о попытке подключиться к местный 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 

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

  1. Используйте собственный драйвер MySQL для 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;