Когда я пытаюсь загрузить 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
У меня такая же проблема. Я запускал 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’);