![SQLSTATE[HY000] [2003] '127.0.0.1'(13)에서 MySQL 서버에 연결할 수 없지만 'localhost'는 작동합니다.](https://rvso.com/image/97160/SQLSTATE%5BHY000%5D%20%5B2003%5D%20'127.0.0.1'(13)%EC%97%90%EC%84%9C%20MySQL%20%EC%84%9C%EB%B2%84%EC%97%90%20%EC%97%B0%EA%B2%B0%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%A7%80%EB%A7%8C%20'localhost'%EB%8A%94%20%EC%9E%91%EB%8F%99%ED%95%A9%EB%8B%88%EB%8B%A4..png)
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(허가가 거부되었습니다), 나는 다른 두 가지보다 먼저 이들 중 첫 번째를 조사하겠습니다.