【mysqli连接数据库】mysqli使用localhost问题 Warning: mysqli::mysqli(): (HY000/2002): No such file or directory

时间:2020-09-01  来源:mysql教程  阅读:

PHP的CLI方式访问mysql数据库时出现了一个 No such file or directory的错误,查找资料并在最终解决后记录一下。

这个问题应该也会存在于非CLI方式访问,简单的代码是这样的:

$mysqli = new mysqli("localhost", "root", "123456", "mysql"); 
if ($mysqli->connect_error) { 
    die("Connect Error (" . $mysqli->connect_errno . ") " 
            . $mysqli->connect_error); 
}; 
 
echo "ok"; 

•如果上面连接地址为"localhost"就会报错,如下:

Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in /mnt/www/cglevi/publichtml/mysql.php on line 2 Connect Error (2002) No such file or directory

•将"localhost"修改为"127.0.0.1"之后链接正常



将代码:

$con = mysqli_connect("localhost","root","123456","mysql");

修改为:

$con = mysqli_connect("127.0.0.1","root","123456","mysql");

 

如果上面的连接地址是 localhost 就会报此错误,改成 127.0.0.1 后正常。

当主机填写为localhost时MySQL会采用 unix domain socket连接,当主机填写为127.0.0.1时MySQL会采用TCP/IP的方式连接。使用Unix socket的连接比TCP/IP的连接更加快速与安全。这是MySQL连接的特性,可以参考官方文档的说明4.2.2. Connecting to the MySQL Server。

这个问题有以下几种解决方法:

使用TCP/IP代替Unix socket。即在连接的时候将localhost换成127.0.0.1。
修改MySQL的配置文件my.cnf,指定mysql.socket的位置:

/var/lib/mysql/mysql.sock (你的mysql.socket路径)。

直接在php建立连接的时候指定my.socket的位置(官方文档:mysqli_connect)。比如:


$db = new MySQLi("localhost", "root", "root", "my_db", "3306", "/var/run/mysqld/mysqld.sock")

通常意义上localhost和127.0.0.1是等价的,只是mysql在处理这个名词的问题上有一些不同,是根据不同的地址来采取的不同的通信手段。

问题的最终解决方案是在连接的时候手动指定了 sock 文件的路径

原因呢,我猜大概是为了本地应用能获得更好的性能。而且localhost这个地址在mysql中也不会做匹配。即user@’%’不能匹配到user@’localhost’

【mysqli连接数据库】mysqli使用localhost问题 Warning: mysqli::mysqli(): (HY000/2002): No such file or directory

http://m.bbyears.com/shujuku/95977.html

推荐访问:
相关阅读 猜你喜欢
本类排行 本类最新