phpMyAdmin AuthType=config: mysqli_real_connect(): (HY000/2002): 没有此文件或目录

phpMyAdmin AuthType=config: mysqli_real_connect(): (HY000/2002): 没有此文件或目录

当我尝试使用 AuthType=config 加载 phpMyAdmin 4.8.0 时出现错误:

无法连接:设置无效。mysqli_real_connect():(HY000/2002):没有此文件或目录 phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接。您应该检查配置中的主机、用户名和密码,并确保它们与 MySQL 服务器管理员提供的信息相对应。

phpMyAdmin config.inc.cfg 包含:

$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 --plugin-dir=/usr/local/mysql57/lib/plugin --log-error=myhost.com.err --pid-file=myhost.com.pid --socket=/tmp/mysql57.sock --port=3306

我在 my.cnf 中设置了 skip-networking,因此无法将 127.0.0.1 用于主机。可能存在什么问题?

更多细节:

Centos 7.4

mysql-5.7.21-linux-glibc2.12-x86_64(通用二进制文件),社区版本

PHP 7.2.4

nginx-1.12.2

答案1

我的猜测是该指令在负责 PHP 运行的服务中PrivateTmp设置,从而定义一个单独的目录并阻止 PHP 连接到位于系统临时目录中的套接字。yes/tmp/tmp/mysql57.sock

有两种可能的解决方案,可以通过扩展nginx.servicephp-fpm.service单元来应用。这取决于 nginx 如何配置来运行 PHP 脚本。

  • 选项 1: 弄清楚应该扩展哪个 systemd 单元并PrivateTmp=no在那里设置。

  • /tmp选项 2:配置 MySQL 以监听位于和之外的另一个目录中的 UNIX 套接字/var/tmp。我建议您使用/run/mysqld.socket/run/mysqld/mysqld.socket


参考自systemd.exec(5)手册页:

PrivateTmp=

接受一个布尔参数。如果为true,则为执行的进程设置一个新的文件系统命名空间,并在其中挂载私有/tmp和目录,这些目录不与命名空间外的进程共享。这对于保护对进程临时文件的访问很有用,但使得通过或进行进程共享变得不可能。如果启用此选项,服务停止后,这些目录中由服务创建的所有临时文件都将被删除。默认为 false。可以使用指令在同一个私有和命名空间中运行两个或多个单元,详情请参阅。如果设置了 ,则此设置是隐含的。对于此设置,适用与和相关调用相同的挂载传播和权限限制,请参阅上文。启用此设置的副作用是添加和依赖所有访问和所需的挂载单元。此外,还会添加对 的隐式排序。/var/tmp/tmp/var/tmp/tmp/var/tmpJoinsNamespaceOf=systemd.unit(5)DynamicUser=ReadOnlyPaths=Requires=After=/tmp/var/tmpAfter=systemd-tmpfiles-setup.service(8)

请注意,此设置的实现可能无法实现(例如,如果挂载命名空间不可用),并且应以不仅仅依赖此设置来确保安全性的方式编写该单元。

此选项仅适用于系统服务,不支持在服务管理器的每个用户实例中运行的服务。

答案2

如果您正在使用 SELinux,请检查一下。

我遇到了同样的问题。我运行的是强制执行 SELinux 的 CentOS 8,尽管所有配置都已正确修复,但我还是收到了问题中提到的错误 ( mysqli_real_connect(): (HY000/2002): No such file or directory)。后来,我通过 SELinux 允许 MySQL 连接后摆脱了困境。

使用以下命令检查 SELinux 状态:

sestatus

允许 Apache 通过 SELinux 连接数据库

setsebool httpd_can_network_connect_db 1

使用-P选项可使更改永久生效。如果没有此选项,则布尔值将在重启时重置为 0。

setsebool -P httpd_can_network_connect_db 1

答案3

对于此错误,您必须重新启动 mysql 服务或您拥有的 sql。 服务mysql重启

答案4

我自己解决了这个错误,这样做

在 wp-config.php 文件中,添加(或更改)以下行

define(‘DB_HOST’, ‘localhost’);

define(‘DB_HOST’, ‘127.0.0.1’);

相关内容