PHP 연결 실패: SQLSTATE[HY000] [2002] 접속 거부
PHP 연결을 사용하여 phpmyadmin에 있는 MySQL 데이터베이스를 연결하려고 합니다.접속이 성공했는지 아닌지만 확인하려고 하면 됩니다.데이터베이스를 호스트하기 위해 MAMP를 사용하고 있습니다.사용하려는 접속은 다음과 같습니다.
<?php
$servername = "127.0.0.1";
$username = "root";
$password = "root";
try {
$conn = new PDO("mysql:host=$servername;dbname=AppDatabase", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
?>
우체부를 사용하여 연결이 작동하는지 테스트하고 있지만 다음 오류 메시지가 계속 표시됩니다.
접속 실패: SQLSTATE[HY000] [2002] 접속 거부
다음 오류 메시지가 표시되기 전:
접속 실패: SQLSTATE[HY000] [2002] 해당 파일 또는 디렉터리가 없습니다.
이는 서버명을 localhost로 설정했기 때문입니다.이것을 IP 주소로 변경함으로써 접속이 거부되어 무엇이 문제인지 알 수 없습니다.
이에 대한 어떤 도움도 주시면 감사하겠습니다.
접속이 기능하지 않는 이유를 찾았습니다.이것은 접속이 포트 8888에 접속하려고 할 때 포트 8889에 접속할 필요가 있었기 때문입니다.
$conn = new PDO("mysql:host=$servername;port=8889;dbname=AppDatabase", $username, $password);
이렇게 하면 문제가 해결되었지만 서버 이름을 localhost로 변경해도 오류가 발생합니다.
접속 실패: SQLSTATE[HY000] [2002] 해당 파일 또는 디렉터리가 없습니다.
그러나 서버 이름에 IP 주소를 입력하면 정상적으로 연결됩니다.
내 경우 MySQL 서버가 실행되지 않았습니다.MySQL 서버를 재부팅하여 문제가 해결되었습니다.
//on ubuntu server
sudo /etc/init.d/mysql start
MySQL 중지 문제를 방지하려면 Ubuntu 14.04 LTS Linux에서 "initctl" 유틸리티를 사용하여 장애 또는 재부팅 시 서비스가 재시작되는지 확인합니다.데이터 보존을 위해 이 작업을 수행하기 전에 루트 볼륨의 스냅샷(mysql이 중지된 상태)을 말하는 것을 고려하십시오[8].다음 명령을 사용하여 "initctl" 유틸리티를 사용하여 중지 및 시작 작업을 사용하여 mysql 서비스를 관리할 수 있습니다.
$ sudo initctl stop mysql
$ sudo initctl start mysql
동작을 확인하려면 다음 명령을 사용하여 서비스 상태를 확인하고 프로세스 ID(pid)를 취득하고 "mysql" 프로세스를 종료하여 장애를 시뮬레이션하고 잠시 후(일반적으로 1분 이내) 새로운 프로세스 ID로 실행 중임을 확인할 수 있습니다.
$ sudo initctl status mysql # get pid
$ sudo kill -9 <pid> # kill mysql process
$ sudo initctl status mysql # verify status as running after sometime
메모: 최신 Ubuntu 버전에서는 initctl은 systemctl로 대체되었습니다.
하여 MAMP를 했습니다.host=localhost
로로 합니다.host=127.0.0.1
그러나 새로운 문제가 발생하였습니다.접속 거부
이 문제를 put으로 해결했습니다.'port' => '8889'
、 。'Datasources' => [
MAMP ON Mac을 사용하여 이름을 변경하여 문제를 해결합니다.
/Applications/MAMP/tmp/mysql/mysql.sock.lock
로.
/Applications/MAMP/tmp/mysql/mysql.sock
는 꽤 많은 을 i a a a a a a a a i i i a a a a a.docker
모든 컨테이너가 있는 환경docker
컨테이너를 사용하고 있었습니다.Phinx
으로 다른 합니다.다른 설정으로 다른 응답을 공유하기 위해서입니다.
기능하는 솔루션
"host" => "db", // {docker container's name} Worked
"host" => "172.22.112.1", // {some docker IP through ipconfig - may change on every instance - usually something like 172.x.x.x} Worked
기능하지 않는 솔루션
"host" => "127.0.0.1", // SQLSTATE[HY000] [2002] Connection refused
"host" => "docker.host.internal", // SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name does not resolve
"host" => "localhost", // SQLSTATE[HY000] [2002] No such file or directory
는 달리고 .Phinx
다음과 같은 방법으로.
docker compose --env-file .env run --rm phinx status -e development
1. 서버 증명서 검증 플래그
해야 하고 .PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT
new PDO
array, " " " " 、 " " " array options options options options options "PDO::MYSQL_ATTR_SSL_CA
CA ★★★★★★★★★★★★★★★★★」
이것이 없으면 서버의 mysql 로그는 도움이 됩니다.
2021-07-27 17:02:51 597605 [Warning] Aborted connection 597605 to db: 'unconnected' user: 'unauthenticated' host: '192.168.10.123' (This connection closed normally without authentication)
DSN에서 올바른 DB와 사용자 이름 등을 전달하고 있었습니다.빈 옵션 배열은 적어도 오류 로그에 DB 및 사용자를 표시합니다.나는 이러한 일에는 타당한 기술적 이유가 있다고 확신한다.
다음 번에 이 페이지가 뜨면 더 쉽게 찾을 수 있도록 이 정보를 추가합니다.
2. 접속 문자열의 호스트
SSL 의 경우, 호스트명이 증명서내에서 CN(Common Name)로서 사용되고 있는 경우는, 호스트명이 아닌 IP 주소를 사용해 접속했을 때의 에러도 확인할 수 있었습니다.
저는 MAMP가 아닌 mac에서 php 버전으로 .bash_profile의 PATH 변수가 틀렸습니다.$PATH env 변수에 MAMP PHP bin 폴더를 추가합니다.저는 다음과 같이 생각합니다.
/Applications/mampstack-7.1.21-0/php/bin
에서 " " " 를 실행합니다.
vim ~/.bash_profile
~/.bash_profile
파일을 편집하려면 i를 입력하고 맨 위에 있는 bin 디렉토리를 PATH 변수로 파일에 추가합니다.
내보내기 PATH="/어플리케이션/mampstack-7.1.21-0/php/bin/:$PATH"
리
ESC
라고 입력합니다.:wq
, 를 누릅니다.Enter
- 에서 " " " 를 실행합니다.
source ~/.bash_profile
- [ ]에 [Terminal]라고 입력합니다.
which php
MAMP PHP를 사용합니다.
도커 컨테이너에서도 같은 문제가 발생했습니다.php:8.0-fpm-alpine
도커 파일에 다음 행을 추가했는데 문제가 해결되었습니다.
RUN apk add mysql-client
서버 부팅을 잊어버린 것 같습니다. 가서 xampp를 부팅합니다.
한번은 비슷한 문제가 있었는데 데이터베이스 내의 사용자가 다음과 같은 방법으로 작성되었다는 것을 알게 되었습니다.
CREATE USER 'webpage'@'localhost' IDENTIFIED BY 'password';
접속 상세 php 스크립트에 localhost가 있을 때는 정상적으로 동작하지만 IP 주소가 있을 때는 동작하지 않습니다.빠른 스왑(접속 세부 정보에서 사용자와 localhost를 생성할 때 IP 주소)을 통해 두 항목이 일치해야 합니다.
여전히 '연결 거부'와 씨름하고 있는 모든 분들을 위해, 제 조언은 이렇습니다.XAMPP 또는 기타 유사한 소프트웨어를 다운로드하여 MySQL을 시작합니다.MySQL만 실행해도 Apache나 다른 것을 실행할 필요가 없습니다.
언급URL : https://stackoverflow.com/questions/29395452/php-connection-failed-sqlstatehy000-2002-connection-refused
'programing' 카테고리의 다른 글
JSON 파일을 예쁘게 인쇄하는 방법 (0) | 2023.01.02 |
---|---|
Eclipse - 디버거가 중단점에서 멈추지 않음 (0) | 2023.01.02 |
vue 전원이 켜진 Chrome 확장 내에서 npm을 사용하여 부트스트랩 및 종속성을 로드하는 방법 (0) | 2023.01.02 |
"assert" 키워드의 역할은 무엇입니까? (0) | 2023.01.02 |
파일 핸들을 사용하여 파일 이름 가져오기(또는 파일 삭제) (0) | 2023.01.02 |