programing

PHP 연결 실패: SQLSTATE[HY000] [2002] 접속 거부

kingscode 2023. 1. 2. 22:52
반응형

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_CERTnew PDOarray, " " " " 、 " " " array options options options options options "PDO::MYSQL_ATTR_SSL_CACA ★★★★★★★★★★★★★★★★★」

이것이 없으면 서버의 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
  1. 에서 " " " 를 실행합니다.vim ~/.bash_profile~/.bash_profile

  2. 파일을 편집하려면 i를 입력하고 맨 위에 있는 bin 디렉토리를 PATH 변수로 파일에 추가합니다.

    내보내기 PATH="/어플리케이션/mampstack-7.1.21-0/php/bin/:$PATH"

  3. ESC라고 입력합니다.:wq , 를 누릅니다.Enter

  4. 에서 " " " 를 실행합니다.source ~/.bash_profile
  5. [ ]에 [Terminal]라고 입력합니다.which phpMAMP 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

반응형