![SQLSTATE[HY000] [2003] 無法連線到「127.0.0.1」(13) 上的 MySQL 伺服器,但「localhost」可以運作](https://rvso.com/image/97160/SQLSTATE%5BHY000%5D%20%5B2003%5D%20%E7%84%A1%E6%B3%95%E9%80%A3%E7%B7%9A%E5%88%B0%E3%80%8C127.0.0.1%E3%80%8D(13)%20%E4%B8%8A%E7%9A%84%20MySQL%20%E4%BC%BA%E6%9C%8D%E5%99%A8%EF%BC%8C%E4%BD%86%E3%80%8Clocalhost%E3%80%8D%E5%8F%AF%E4%BB%A5%E9%81%8B%E4%BD%9C.png)
Cent os Apache + php + MySQL from php 當你嘗試連接位址 127.0.0.1 的 MySQL 時,會發生錯誤。如果您更換一條線路127.0.0.1
,localhost
一切正常,沒有問題。瀏覽器中 php 的唯一問題。如果控制台執行
php -r "var_dump (mysqli_connect ( '127.0.0.1', 'user', 'pass', 'db_name'))"
沒有錯誤。另外,如果控制台輸入
mysql -u user -h 127.0.0.1 -p db_name
或者
mysql -u user -h localhost -p db_name
同樣,一切正常。可能是什麼問題呢?
軟體版本
- PHP-5.6.26
- MySQL-5.5.53
- 阿帕契2.2.15
最後,
$ host localhost
localhost has address 127.0.0.1
php程式碼工作:
$dsn = 'mysql:dbname=testdb;host=localhost';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
php 程式碼不工作:
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
SQLSTATE[HY000] [2003] 無法連線到「127.0.0.1」上的 MySQL 伺服器 (13)
php程式碼工作:
$link = mysqli_connect("localhost", "my_user", "my_password", "my_db");
php 程式碼不工作:
$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");
解決方案:
setsebool httpd_can_network_connect_db on
答案1
根據StackOverflow 上的這個(未接受的)答案,原因是MySQLlocalhost
對.的解釋不同127.0.0.1
。這是文件中確認,請參閱開頭的段落,“localhost
在 Unix 上,MySQL 程式特別對待主機名」。
- 這
127.0.0.1
是一個明確的 IPv4 位址,因此用戶端嘗試透過 TCP/IP 進行連接 - 這
localhost
是使用本機的隱含提示,MySQL 在可能的情況下透過本機套接字而不是 TCP/IP 來實現
由於您的localhost
連接有效,但127.0.0.1
另一個連接無效,因此這些問題之一似乎可能是罪魁禍首:
- 您的資料庫權限拒絕來自的連接
127.0.0.1
- 您有防火牆規則阻止所有透過 TCP/IP 的入站資料庫連線嘗試
- 您已變更
bind
MySQL 的設定條目,以便它不會綁定到環回位址
給出錯誤代碼 13 (沒有權限),我會先研究其中的第一個,然後再研究其他兩個。