[php] PDOException SQLSTATE [HY000] [2002] 해당 파일 또는 디렉토리가 없습니다.

나는 성공적으로 fortrabbit 내 (아주 기본) 사이트를 구축했지만, 최대한 빨리 SSH 연결로 등 일부 명령 (실행하는 데 있다고 생각 php artisan migrate또는php artisan db:seed 오류 메시지가 나타납니다.

[PDOException]
SQLSTATE[HY000] [2002] No such file or directory

어떤 시점에서 내 테이블이 있기 때문에 마이그레이션이 작동해야했지만 지금은 왜 그것이 나를 위해 작동하지 않는지 설명하지 않습니다.



답변

오류 메시지는 소켓을 통한 MySQL 연결이 시도되었음을 나타냅니다 (지원되지 않음).

Laravel (artisan)의 맥락에서 아마도 다른 / 올바른 환경을 사용하고 싶을 것입니다. 예 : php artisan migrate --env=production(또는 어떤 환경). 여기를 참조 하십시오 .


답변

라 라벨 4 :app/config/database.php 파일의 “host” 를 “localhost”에서 “127.0.0.1”로 변경

라 라벨 5 :.env 파일의 “DB_HOST” 를 “localhost”에서 “127.0.0.1”로 변경

나는 똑같은 문제가 있었다. 위의 해결책 중 어느 것도 나를 위해 일하지 않았습니다. /app/config/database.php 파일의 “host”를 “localhost”에서 “127.0.0.1”로 변경하여 문제를 해결했습니다.

왜 “localhost”가 기본적으로 작동하지 않는지 확실하지 않지만 symfony2 게시물에서 해결 된 비슷한 질문에서이 답변을 찾았습니다. https://stackoverflow.com/a/9251924/1231563

업데이트 :
일부 사람들은이 픽스가 왜 작동하는지 묻기 때문에 주제에 대해 약간의 연구를했습니다. 이 게시물 https://stackoverflow.com/a/9715164/1231563에 설명 된 것처럼 다른 연결 유형을 사용하는 것처럼 보입니다.

여기서 발생한 문제는 “localhost”가 UNIX 소켓을 사용하고 표준 디렉토리에서 데이터베이스를 찾을 수 없다는 것입니다. 그러나 “127.0.0.1”은 TCP (Transmission Control Protocol)를 사용합니다. 이는 본질적으로이 경우 UNIX 소켓보다 훨씬 안정적인 컴퓨터의 “로컬 인터넷”을 통해 실행됨을 의미합니다.


답변

같은 문제가 발생하여 Mac OS X 10.10 Yosemite를 실행하고 있습니다. 이미 OS와 함께 제공되는 Apache 서버 및 PHP를 활성화했습니다. 그런 다음 mCrypt 라이브러리를 시작하도록 구성했습니다. 그 후 모델과 DB로 작업 할 때 오류가 발생했습니다.

[PDOException]
SQLSTATE[HY000] [2002] No such file or directory

내가 찾은 이유는 PHP와 MySQL을 연결할 수 없기 때문입니다. 이 문제를 해결하려면 다음 단계를 따르십시오.

  1. 터미널을 열고 다음을 사용하여 mysql에 연결하십시오.

    mysql -u root -p
  2. 관련 비밀번호를 묻습니다. 그런 다음 mysql promt를 받으면 다음 명령을 입력하십시오.

    mysql> show variables like '%sock%'
  3. 다음과 같은 것을 얻을 것입니다 :

    +-----------------------------------------+-----------------+
    | Variable_name                           | Value           |
    +-----------------------------------------+-----------------+
    | performance_schema_max_socket_classes   | 10              |
    | performance_schema_max_socket_instances | 322             |
    | socket                                  | /tmp/mysql.sock |
    +-----------------------------------------+-----------------+
  4. 마지막 행의 값을 유지하십시오.

    /tmp/mysql.sock
  5. 당신의에서 laravel프로젝트 폴더의 대한 모습 database.php의 당신은 DB 연결 매개 변수를 구성 할 경우 파일이 있습니다. 에서 MySQL의 섹션 끝에 다음 줄을 추가합니다 :

    'unix_socket' => '/tmp/mysql.sock'
  6. 다음과 같은 것이 있어야합니다.

    'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => 'SchoolBoard',
            'username'  => 'root',
            'password'  => 'venturaa',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'unix_socket' => '/tmp/mysql.sock',
        ),

이제 변경 사항을 저장하고 페이지를 새로 고침하면 작동합니다!


답변

[PDOException] SQLSTATE[HY000] [2002] No such file or directory다른 이유로 오류 가 발생했습니다 . 우분투 12.04에서 Apache 2.4.7, PHP v5.5.10 및 MySQL 5.6.16으로 완전히 새로운 LAMP 스택을 완성했습니다. 사이트를 다시 옮겨서 해고했습니다. 그러나 [PDOException]위의 이유로 Laravel 4.2.x 기반 사이트를로드 할 수 없습니다 . 그래서이 php -i | grep pdo줄을 확인 하고 알았습니다.

pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock

그러나 내 /etc/my.cnf에서 양말 파일은 실제로에 /var/run/mysqld/mysqld.sock있습니다.

그래서, 나는 php.ini를 열어서 값을 설정했습니다 pdo_mysql.default_socket:

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock

그런 다음 아파치를 다시 시작하고 확인했습니다 php -i | grep pdo.

pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock

그것은 나를 위해 그것을 고쳤다.


답변

@stuyam의 답변으로 “No such file or directory”문제가 해결되었습니다.

짧은 대답 : /app/config/database.php 파일의 “host”를 “localhost”에서 “127.0.0.1”로 변경하십시오.

그러나 “연결이 거부되었습니다”라는 오류가 발생했습니다. 누구든지 같은 문제가 발생하면 app / config / local / database.php 파일을 업데이트하여 포트가 8889가되도록했습니다.

'mysql' => array(
        'driver'    => 'mysql',
        'host'      => '127.0.0.1',
        'port'      => '8889',
        'database'  => 'databaseName',
        'username'  => 'root',
        'password'  => 'root',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),


답변

Laravel Homestead를 사용하는 경우 서버에서 명령을 호출하고 있는지 확인하십시오.

homestead ssh

그런 다음 올바른 디렉토리로 cd하고 명령을 실행하십시오.


답변

내 경우에는 전혀 문제가 없었으며 mysql 서비스를 시작하는 것을 잊어 버렸습니다 …

sudo service mysqld start