当我尝试使用 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.service
或php-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/tmp
JoinsNamespaceOf=
systemd.unit(5)
DynamicUser=
ReadOnlyPaths=
Requires=
After=
/tmp
/var/tmp
After=
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’);