当我尝试使用套接字(非TCP)连接在Centos 7.4上使用PHP 7.2.4 mysqli_connect()
连接到MySQL 5.7.21时出现错误:
警告:mysqli_connect():( HY000 / 2002):没有这样的文件或目录
mysqli.default_socket = /tmp/mysql.sock
的[mysqld]
插座= / TMP /的mysql.sock
...
[客户]
socket = / tmp / mysql.sock
来自命令行的MySQL连接工作正常:
/usr/local/mysql57/bin/mysql --socket tmp/mysql.sock --host localhost -u root -p
欢迎使用MySQL监视器。命令以;结尾;或\ g。
您的MySQL连接ID是3
服务器版本:5.7.21 MySQL社区服务器(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它可以正常工作。套接字为什么不工作?
我有另一个带有MySQL 5.7.11的Centos 7.4映像,它适用于socket。但是,我不是使用systemctl
启动它。我也注意到即使它正在运行,也没有/tmp/mysql.sock.lock文件,只需/tmp/mysql.sock
除此之外,它实际上是相同的,事实上,在。php.ini和my.cnf文件中没有指定/tmp/mysql.sock。
答案 0 :(得分:2)
在我的情况下,解决方案是将localhost更改为127.0.0.1
我正在从WSL连接到MySQL服务器的Windows实例
答案 1 :(得分:0)
这可能是一个简单的权限问题。好像只有root / current user / sudo才有权访问tmp文件夹(这就是为什么终端可以工作而php没有)。
另外,作为我自己的Centos 7 mysql设置的参考:
我的datadir和socket位置是相同的,因此mysql可以访问.sock文件
--datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock
答案 2 :(得分:0)
您希望通过代码中的套接字连接到mysql
$dblink = mysqli_connect('localhost', 'root', 'rootpass', 'testdb', 3306, '/tmp/mysql.sock');
尝试将其替换为:
$dblink = mysqli_connect('/tmp/mysql.sock', 'root', 'rootpass', 'testdb', 3306);
这里也有一个解决方案https://serverfault.com/questions/673854/how-to-let-php-connect-to-database-by-using-unix-socket-joomla希望这会有所帮助。
答案 3 :(得分:0)
就我而言,我使用strace /usr/bin/php test.php
并找到了更多信息:
connect(3,{sa_family = AF_UNIX, sun_path =“ / var / run / mysqld / mysqld.sock”},29)= -1 ENOENT(无此文件 或目录)
这是由于我在监狱中奔跑而无法访问本地套接字文件,因此我被迫通过将php代码中的localhost更改为127.0.0.1来使用TCP协议。