SQLSTATE[HY000] [2003] '127.0.0.1'(13)에서 MySQL 서버에 연결할 수 없지만 'localhost'는 작동합니다.

SQLSTATE[HY000] [2003] '127.0.0.1'(13)에서 MySQL 서버에 연결할 수 없지만 'localhost'는 작동합니다.

Cent os Apache + php + php에서 MySQL 주소 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에 대한 이 (허용되지 않은) 답변localhost, 그 이유는 MySQL이 와 다르게 해석하기 때문입니다 127.0.0.1. 이것은문서에서 확인됨, "로 시작하는 단락을 참조하세요.Unix에서 MySQL 프로그램은 호스트 이름을 localhost특별히 처리합니다.".

  • 이는 127.0.0.1명시적인 IPv4 주소이므로 클라이언트는 TCP/IP를 통해 연결을 시도합니다.
  • 이는 localhost가능한 경우 TCP/IP가 아닌 로컬 소켓을 통해 MySQL이 구현하는 로컬 호스트를 사용하라는 암시적 힌트입니다.

연결 localhost은 작동하지만 연결 127.0.0.1은 작동하지 않으므로 다음 문제 중 하나가 원인일 가능성이 있습니다.

  • 귀하의 데이터베이스 권한이 다음의 연결을 거부합니다.127.0.0.1
  • TCP/IP를 통한 모든 인바운드 데이터베이스 연결 시도를 차단하는 방화벽 규칙이 있습니다.
  • bind루프백 주소에 바인딩되지 않도록 MySQL의 구성 항목을 변경했습니다.

오류 코드 13(허가가 거부되었습니다), 나는 다른 두 가지보다 먼저 이들 중 첫 번째를 조사하겠습니다.

관련 정보