萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysqli使用localhost問題 Warning: mysqli::mysqli(): (HY000/2002): No such file or directory

mysqli使用localhost問題 Warning: mysqli::mysqli(): (HY000/2002): No such file or directory

mysqli使用localhost問題 Warning: mysqli::mysqli(): (HY000/2002): No such file or directory,好像是連接的問題吧,這裡我們不管什麼問題先來看看文章的介紹吧,具體的操作如下所示。

PHP的CLI方式訪問mysql數據庫時出現了一個 No such file or directory的錯誤,查找資料並在最終解決後記錄一下。

這個問題應該也會存在於非CLI方式訪問,簡單的代碼是這樣的:

<?php 
$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’

copyright © 萬盛學電腦網 all rights reserved