mysql 使用 127.0.0.1可以连接但是 localhost却不可以

  • 问题描述

       在一次客户项目的部署中,发现数据库连接失败,报错 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 

 

 

 

 

你可能感兴趣的:(mysql,no,such,file,or,directory,mysqli,php)