- 问题描述
在一次客户项目的部署中,发现数据库连接失败,报错 No such file or directory
- 查找原因
于是写了一个测试脚本如下
//创建连接:参数1:主机地址 2:数据库用户名 3:用户密码 4:数据库
$mysqli = new mysqli("localhost","web","123456","oa");
//判断连接是否成功
if($mysqli->connect_errno){
die($mysqli->connect_error);
}
//设置编码
$mysqli->set_charset("utf8");
return $mysqli;
发现确实失败了,后尝试改为127.0.0.1,连接成功。
//创建连接:参数1:主机地址 2:数据库用户名 3:用户密码 4:数据库
$mysqli = new mysqli("127.0.0.1","web","123456","oa");
//判断连接是否成功
if($mysqli->connect_errno){
die($mysqli->connect_error);
}
//设置编码
$mysqli->set_charset("utf8");
return $mysqli;
后来查阅了很多相关文章发现 localhost 和 127.0.0.1 在mysql中是有区别的,127.0.0.1 是通过TCP/IP连接的,而localhost是通过socket连接,因为在php.ini中配置的socket路径找不到,所以报错。
如果想用第一种写法可以修改php.ini中socket路径
; Default socket name for local MySQL connects. If empty, uses the built-in
; MySQL defaults.
; http://php.net/pdo_mysql.default-socket
pdo_mysql.default_socket=正确路径
另外在my.conf中可以看到socket路径
在配置文件中可以看到具体的socket路径
vi /etc/mysql/my.cnf
socket = /var/run/mysqld/mysqld.sock