php - 本地主机 : socket: mysqli_connect(): (HY000/2002): No such file or directory

标签 php mysql sockets centos

当我尝试在 Centos 7.4 上使用 PHP 7.2.4 mysqli_connect() 使用套接字(不是 TCP)连接连接到 MySQL 5.7.21 时,出现错误:

Warning: mysqli_connect(): (HY000/2002): No such file or directory

php.ini

mysqli.default_socket = /tmp/mysql.sock

my.cnf

[mysqld]
socket=/tmp/mysql.sock
...
[client]
socket=/tmp/mysql.sock

从命令行的 MySQL 连接工作正常:

/usr/local/mysql57/bin/mysql --socket tmp/mysql.sock --host localhost -u root -p  

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.21 MySQL Community Server (GPL)

ls -l /tmp/my*  

srwxrwxrwx 1 mysql mysql 0 Apr 19 22:01 /tmp/mysql.sock
-rw------- 1 mysql mysql 5 Apr 19 22:01 /tmp/mysql.sock.lock

ps -edf | grep mysql  

mysql 3593 3329 0 22:01 ? 00:00:03 /usr/local/mysql57/bin/mysqld --defaults-file=/usr/local/mysql57/my.cnf --basedir=/usr/local/mysql57 --datadir=/mysql57 --plugin-dir=/usr/local/mysql57/lib/plugin --log-error=myhost.err --pid-file=myhost.pid --socket=/tmp/mysql.sock --port=3306

$dblink = mysqli_connect('localhost', 'root', 'rootpass', 'testdb', 3306, '/tmp/mysql.sock');
if (mysqli_connect_errno($dblink)) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

MySQL 通用 tar.gz 已安装。我使用的是 nginx 1.12.2。如果我使用 127.0.0.1 或 locahost:3306 这样使用 TCP 就可以正常工作。为什么套接字不工作?

更新#1

我有另一个带有 MySQL 5.7.11 的 Centos 7.4 镜像,它可以使用套接字。但是,我不使用 systemctl 启动它。我还注意到,即使它正在运行,也没有/tmp/mysql.sock.lock 文件,只有/tmp/mysql.sock
除此之外,它基本上是相同的,事实上,/tmp/mysql.sock 没有在 php.ini 和 my.cnf 文件中的任何地方指定。

最佳答案

就我而言,解决方案是将 localhost 更改为 127.0.0.1

我从 WSL 连接到 MySQL 服务器的 Windows 实例

关于php - 本地主机 : socket: mysqli_connect(): (HY000/2002): No such file or directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49931844/

相关文章:

php - mysql 从 json 编码字段中选择指定的 key_name 和 key_value

php - 通过函数传递数据库字段

mysql - 如何查询 laravel 中的 json 列?

sockets - 我可以接收多播数据包,但不能接收单播数据包

java - 如何修复 'Server sending data faster than client can handle, server freezes'

PHP PDO 查询为 FLOAT 字段返回不准确的值

php - !!$var 和 (bool) $var 之间有什么区别吗?

php - 在 CSS 中插入斜线

PHP在mysql中插入由json对象发布的数据

python - 使用 Pygame 和 python 套接字,黑屏