programing

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo 실패:이름 또는 서비스를 알 수 없습니다.

firstcheck 2022. 10. 28. 21:14
반응형

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo 실패:이름 또는 서비스를 알 수 없습니다.

https://github.com/luciddreamz/laravel Larabel에서 opensshift를 다운로드하여 github을 통해 내 저장소를 업로드합니다.데이터베이스에 연결하기 위한 이 코드가 작동하지 않습니다.문제는 로딩 변수가.env프로젝트의 루트에 있는 파일

이 문제를 해결하기 위해.env

# local environment only
#   for production, see .openshift/.env

APP_ENV=APPLICATION_ENV
APP_DEBUG=true
APP_URL=OPENSHIFT_APP_DNS
APP_KEY=OPENSHIFT_SECRET_TOKEN

DB_DRIVER=mysql
DB_HOST=OPENSHIFT_MYSQL_DB_HOST
DB_PORT=OPENSHIFT_MYSQL_DB_PORT
DB_DATABASE=OPENSHIFT_APP_NAME
DB_USERNAME=OPENSHIFT_MYSQL_DB_USERNAME 
DB_PASSWORD=OPENSHIFT_MYSQL_DB_PASSWORD

CACHE_DRIVER=apc
SESSION_DRIVER=file

에러:

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known

createConnection('mysql:host=OPENSHIFT_MYSQL_DB_HOST;port=OPENSHIFT_MYSQL_DB_PORT;dbname=OPENSHIFT_APP_NAME', 
array('driver' => 'mysql', 
      'host' => 'OPENSHIFT_MYSQL_DB_HOST', 
      'port' => 'OPENSHIFT_MYSQL_DB_PORT', 
      'database' => 'OPENSHIFT_APP_NAME', 
      'username' => 'OPENSHIFT_MYSQL_DB_USERNAME', 
      'password' => 'OPENSHIFT_MYSQL_DB_PASSWORD', 
      'charset' => 'utf8',  
      'collation' => 'utf8_unicode_ci', 
      'prefix' => '', 
      'strict' => false, 
      'name' => 'mysql'), 
array('0', '2', '0', false, '0')) in MySqlConnector.php line 20

오류 메시지의 첫 번째 줄에는 오류 유형인 "PDOException"이 설명되어 있습니다.다음 행에 다음과 같이 표시됩니다.

  1. SQLSTATE 오류 코드(ANSI SQL 표준에 정의되어 있는5글자의 영숫자 식별자).
  2. 드라이버 고유의 에러 코드.
  3. 드라이버 고유의 에러 메시지.
  • "HY000"은 일반적인 서버 오류입니다(MySQL 문서의 서버 오류 코드메시지 참조).
  • "2002"는 "소켓으로 로컬 MySQL 서버에 연결할 수 없음"을 의미하는 MySQL 클라이언트 오류 코드입니다(MySQL 문서의 클라이언트 오류 코드메시지 참조).
  • 드라이버 고유의 에러 코드와 메시지("php_network_getaddresses: getaddrinfo: 실패:Name or service not known" (이름 또는 서비스를 알 수 없음)은 PDO에서 호스트 이름을 확인할 수 없음을 알려줍니다.

첨부한 스택트레이스 행 3에는 컨피규레이션파일에 데이터베이스 접속 파라미터를 지정하지 않은 것이 표시됩니다.로컬에서 테스트하면 오류가 표시되죠?갱신할 필요가 있다/.env실제 데이터베이스 연결 매개 변수를 사용합니다.

체크해 주세요.DB_HOST.env파일

DB_HOST=http://localhost/ --> DB_HOST=localhost

php artisan config:clear 캐시된 설정을 클리어하면 도움이 됩니다.

사용 시 이 문제에 직면한 경우DockerSQL 버전을 사용하고 있는지 확인하십시오.

내 경우:MYSQL_VERSION=latest로의MYSQL_VERSION=5.7.

그런 다음 사용하지 않는 도커 이미지를 삭제해야 합니다.docker system prune -a ( ( ) 。

또, 고객님의.env변경해야 합니다.

DB_HOST=mysql

실행:

php artisan config:clear

누군가에게 도움이 될 것 같아요.

도커와 라라벨을 쓰고 있어요이 문제를 해결하기 위해 값을 변경했습니다.DB_HOST부터localhost로.mysql.

DB_HOST=mysql

DB_HOST 값을 '127.0.0.1'로 대체하고 DB_SOCKET 행을 추가함으로써 동일한 문제를 해결했습니다.이 경우 /var/run/mysqld/mysqld.sock이었습니다.

#DB_HOST=mysql
DB_HOST=127.0.0.1
DB_SOCKET=<mysql exicutable path>

여러 개의 도커 컨테이너가 있는 네트워크에 있는 경우 모든 컨테이너가 가동되고 있는지 확인하십시오.내 컨테이너 중 하나가 고장났는데 어디서 확인할지 알면 뻔해

MySQL 데이터베이스를 응용 프로그램에 추가하지 않았거나 Larabel을 설치한 후 추가한 것 같습니다.이 경우 어플리케이션이 환경변수를 선택하도록 어플리케이션을 정지하고 기동해야 합니다(재기동하지 마십시오.( rhc app stop , rhc app start )데이터베이스를 아직 추가하지 않은 경우 mysql 카트리지 중 하나를 추가한 후 앞서 설명한 명령을 사용하여 응용 프로그램을 중지하고 시작해야 합니다.

나도 같은 문제가 있어서 모두가 이 문제에 대해 이야기하고 있었는데, 이것은 DNS 구성과 관련이 있는 것입니다.컨테이너가 데이터베이스가 있는 도메인의 이름을 해결하는 방법을 모를 수 있기 때문입니다.

컨테이너를 기동하는 시점에서 설정할 수 있다고 생각합니다만, 일단은 설정하는 것이 좋다고 생각합니다.

Windows 10 을 사용하고 있습니다만, 이 경우는 도커의 GUI 를 사용해 몇개의 기능을 제공하고 있습니다.

트레이 바의 도커 아이콘을 오른쪽 클릭하여 "설정" 항목을 선택합니다.

Docker's options

그런 다음 도커 창에서 "네트워크" 섹션을 선택하고 DNS 옵션을 "자동"에서 "고정"으로 변경한 후 "적용"을 누릅니다.그 후에 도커가 자동적으로 재기동합니다.구글의 DNS(8.8.8.8)를 넣었는데 잘 작동했어요.

docker's network section with dns config

도움이 됐으면 좋겠다.

larabel이 .env 컨피규레이션파일을 생성했을 때 larabel은 11행과 12행에서 두 개의 "DB_HOST" 행을 생성하고 mysql이라고 되어 있는 행과 코멘트 없는 행(코멘트 첨부되어 있는 경우)을 삭제하고, 다른 행(로컬호스트 IP 127.0.1을 가지는 행)은 기능합니다.

좋은 하루 되세요.

도커를 사용하는 경우 DB_HOST 값이 실행 중 얻은 올바른 IP 주소와 일치하는지 확인하십시오.docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name or id>

운영 서버 상에 있으며 .env 파일이 전혀 작동하지 않으면 /bootstrap/cache/config로 이동하십시오.php 및 230 줄에 .env 파일에서 캐시된 데이터베이스 데이터를 찾을 수 있습니다.

'mysql' => 
  array (
    'driver' => 'mysql',
    'host' => '127.0.0.1',
    'port' => '3306',
    'database' => 'yorDBname',
    'username' => 'YOURUSERNAME',
    'password' => 'yourpass',
    'unix_socket' => '',
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => true,
    'engine' => 'InnoDB ROW_FORMAT=DYNAMIC',
  ),

도커 컴포지트(사용 중인 경우)의 설정이 잘못되어 mysql 컨테이너가 앱 서버와 같은 네트워크에 있지 않은 경우도 있습니다.

네트워크 플래그를 잊어버리거나 잘못된 도커는 앱 서버의 DNS에 mysql을 추가하지 않으므로 이와 같은 오류가 발생합니다.

Laravel 앱을 Laravel Sail MySQL 8.0 컨테이너에 연결하는 데 문제가 있었습니다.이 문제를 해결하려면DB_HOST부터mysql로.127.0.0.1(Sail 설명서에 나와 있는 내용과 반대됩니다).

우리는 교의와 함께 심포니를 사용하고 있으며 도입을 자동화하는 과정에 있습니다.parameters.yml에 올바른 DB credential을 입력하지 않았을 때 이 오류가 발생하였습니다(원칙: migrations: migrate).

이 실타래가 나를 헛수고로 몰아넣었다. 그래서 나는 다른 사람들이 그럴 필요가 없도록 이 일을 여기에 남겨두겠다.

hostgator 등의 호스팅 서비스에서 이 문제가 발생할 경우 "localhost" 값을 호스팅 공급자가 제공하는 상대 값으로 변경해야 합니다.내 경우 오른쪽 상단 모서리에 있는 cpanel의 phpmyadmin 탭에서 localhost:3302로 사용할 수 있습니다.

제 경우 네트워크 문제와는 전혀 관계가 없습니다.

라라독을 사용하여 현지 라라벨 테스트 환경을 사용하고 있었습니다.laradock은 다른 컨테이너에서 mysql 서버를 실행하므로 .env 파일의 mysql 호스트를 도커 mysql 컨테이너 이름으로 설정해야 합니다.기본값은 mysql입니다.

홈스테드 사용으로 되돌렸을 때 홈스테드는 mysql이라는 이름의 호스트에 접속하려고 했습니다.실제로 localhost를 참조하고 있어야 합니다.

DUH의 순간이야!

다른 (이전) Laravel 설치에서 갑자기 이러한 현상이 발생하는 경우 참고 자료와 마찬가지로 다음과 같습니다.

Laravel 환경은 Win-10 노트북에서 호스트되는 Ubuntu Virtual Box에 있습니다.

USB로 인터넷을 공유하기 위해 전화기를 사용했는데 갑자기 이 문제가 발생하기 시작했습니다.전화를 무선 핫스팟으로 사용하기로 하고 문제가 해결되었습니다.이것은 네임 서버/네트워킹 문제이며 Larabel 또는 MySQL에만 해당되지 않습니다.

제 경우엔 모든 것이 올바르게 설정되었지만Docker인프라스트럭처에 RAM이 더 필요했습니다.기본 RAM이 약 1GB인 Mac용 Docker를 사용하고 있으며 MySQL은 약 1.5GB의 RAM을 사용하고 있습니다(그리고 아마 크래시하고 있었을까요?).도커 RAM 사용률을 3~4Gb로 변경하면 문제가 해결되었습니다.

도커와 함께 Shopware를 사용하는 경우 먼저 다음을 실행해야 합니다../psh.phar ssh그렇다면 어느 쪽이든bin/console명령어는 동작합니다.

언급URL : https://stackoverflow.com/questions/30182984/sqlstatehy000-2002-php-network-getaddresses-getaddrinfo-failed-name-or-ser

반응형