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에 대한 이 (허용되지 않은) 답변localhost
그 이유는 MySQL이 다르게 해석하기 때문입니다 127.0.0.1
. 이것은문서로 확인, 첫 단락 "을 참조하세요.localhost
Unix 에서는 MySQL 프로그램이 호스트 이름을 처리합니다.".
- 이는
127.0.0.1
명시적인 IPv4 주소이므로 클라이언트는 TCP/IP를 통해 연결을 시도합니다. - 이는
localhost
localhost를 사용하라는 암시적 힌트입니다. MySQL은 가능하면 TCP/IP 대신 로컬 소켓을 통해 이를 구현합니다.
귀하의 localhost
연결은 작동하지만 127.0.0.1
다른 연결은 작동하지 않으므로 다음 문제 중 하나가 원인일 수 있습니다.
- 귀하의 데이터베이스 권한은 다음의 연결을 거부합니다.
127.0.0.1
- TCP/IP를 통한 모든 인바운드 데이터베이스 연결 시도를 차단하는 방화벽 규칙이 있습니다.
bind
루프백 주소에 바인딩되지 않도록 MySQL의 구성 항목을 변경했습니다.
오류 코드 13(허가가 거부되었습니다), 이 중 첫 번째를 먼저 살펴보고 나머지 두 개를 살펴보겠습니다.