当我尝试在 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/