SQLSTATE[HY000] [2003] 無法連線到「127.0.0.1」(13) 上的 MySQL 伺服器,但「localhost」可以運作

SQLSTATE[HY000] [2003] 無法連線到「127.0.0.1」(13) 上的 MySQL 伺服器,但「localhost」可以運作

Cent os Apache + php + MySQL from php 當你嘗試連接位址 127.0.0.1 的 MySQL 時,會發生錯誤。如果您更換一條線路127.0.0.1localhost一切正常,沒有問題。瀏覽器中 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 的入站資料庫連線嘗試
  • 您已變更bindMySQL 的設定條目,以便它不會綁定到環回位址

給出錯誤代碼 13 (沒有權限),我會先研究其中的第一個,然後再研究其他兩個。

相關內容