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

phpMyAdmin AuthType = config: mysqli_real_connect (): (HY000 / 2002): нет такого файла или каталога

Когда я пытаюсь загрузить phpMyAdmin 4.8.0 с помощью AuthType = config, я получаю сообщение об ошибке:

Невозможно подключиться: неверные настройки. mysqli_real_connect (): (HY000 / 2002): Нет такого файла или каталога, который phpMyAdmin пытался подключиться к серверу MySQL, и сервер отклонил соединение. Вы должны проверить хост, имя пользователя и пароль в своей конфигурации и убедиться, что они соответствуют информации, предоставленной администратором сервера MySQL.

Файл config.inc.cfg phpMyAdmin содержит:

$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'MYUSER';
$cfg['Servers'][$i]['password'] = 'MYPASSWORD';
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'socket';
$cfg['Servers'][$i]['socket'] = '/tmp/mysql57.sock';

Я могу подключиться к mysql через командную строку, используя сокет с такими же учетными данными и /tmp/mysql57.sock также существует:

ps -edf | grep mysql

MySQL 18090 17814 0 20:17? 00:00:00 / usr / local / mysql57 / bin / mysqld --defaults-file = / usr / local / mysql57 / my.cnf --basedir = / usr / local / mysql57 --datadir = mysqldata / mysql57 - каталог-плагинов = / usr / local / mysql57 / lib / plugin --log-error = myhost.com.err --pid-file = myhost.com.pid --socket = / tmp / mysql57.sock --port = 3306

У меня пропущена сеть в my.cnf, поэтому я не могу использовать 127.0.0.1 для хоста. В чем может быть проблема?

Подробнее:

Centos 7,4

mysql-5.7.21-linux-glibc2.12-x86_64 (общий двоичный файл), версия сообщества

PHP 7.2.4

nginx-1.12.2

Если вы используете SELinux, проверьте это.

У меня такая же проблема. Я запускал CentOS 8 с принудительным применением SELinux и получал ошибку, упомянутую в вопросе (mysqli_real_connect(): (HY000/2002): No such file or directory) несмотря на то, что все конфигурации исправлены правильно. Позже я избавился от проблем, разрешив MySQL-соединения через SELinux.

Проверьте статус SELinux с помощью этой команды:

sestatus

Разрешить Apache подключать базу данных через SELinux

setsebool httpd_can_network_connect_db 1

Использовать -P опция делает изменение постоянным. Без этой опции логическое значение будет сброшено на 0 при перезагрузке.

setsebool -P httpd_can_network_connect_db 1

Я предполагаю, что PrivateTmp директива установлена ​​на yes в службе, отвечающей за выполнение PHP, таким образом определяя отдельный /tmp каталог и предотвращение подключения PHP к /tmp/mysql57.sock сокет, расположенный во временном каталоге системы.

Есть два возможных решения, которые следует применить, расширив либо nginx.service или php-fpm.service Блок. Это зависит от того, как nginx настроен для запуска скриптов PHP.

  • Вариант 1: выяснить, какой модуль systemd следует расширить и установить PrivateTmp=no там.

  • Вариант 2: настроить MySQL для прослушивания сокета UNIX в другом каталоге, расположенном вне /tmp и /var/tmp. Я предлагаю вам использовать либо /run/mysqld.socket или /run/mysqld/mysqld.socket для этого.


Ссылка из systemd.exec (5) страница руководства:

PrivateTmp =

Принимает логический аргумент. Если true, устанавливает новое пространство имен файловой системы для выполняемых процессов и монтирует частные /tmp и /var/tmp каталоги внутри него, которые не используются процессами за пределами пространства имен. Это полезно для безопасного доступа к временным файлам процесса, но делает обмен между процессами через /tmp или /var/tmp невозможно. Если этот параметр включен, все временные файлы, созданные службой в этих каталогах, будут удалены после остановки службы. По умолчанию - false. Можно запустить два или более юнита в одном частном /tmp и /var/tmp пространство имен с помощью JoinsNamespaceOf= директива, см. systemd.unit(5) для подробностей. Этот параметр подразумевается, если DynamicUser= установлен. Для этого параметра применяются те же ограничения относительно распространения монтирования и привилегий, что и для ReadOnlyPaths= и связанные вызовы, см. выше. Включение этого параметра имеет побочный эффект добавления Requires= и After= зависимости от всех модулей монтирования, необходимые для доступа /tmp и /var/tmp. Более того, неявно After= заказ на systemd-tmpfiles-setup.service(8) добавлен.

Обратите внимание, что реализация этого параметра может быть невозможна (например, если пространства имен монтирования недоступны), и модуль должен быть написан таким образом, чтобы не полагаться исключительно на этот параметр для безопасности.

Этот параметр доступен только для системных служб и не поддерживается для служб, запущенных в индивидуальных экземплярах диспетчера служб.

Для этой ошибки вам необходимо перезапустить службу mysql или какой sql у вас есть. Сервис mysql restart

Я решил эту ошибку, сделай это

В файле wp-config.php включите (или измените) эту строку из

define(‘DB_HOST’, ‘localhost’);

к

define(‘DB_HOST’, ‘127.0.0.1’);