drush를 사용할 때`PDOException : SQLSTATE [HY000] [2002] 해당 파일이나 디렉토리가 없습니다.


21

처음으로 Drush를 설치 했으므로 (구성 오류 일 수 있음) 최신 코어 버전 Drupal로 업데이트하려고합니다.

Drush 가이 오류를 겪고 있습니다-OSX 상자에 있습니다.

dev5:clientnamedirectory my.name$ drush pm-update projects drupal-7.25
<h1>Additional uncaught exception thrown while handling exception.</h1>

<h2>Original</h2><p>PDOException: SQLSTATE[HY000] [2002] No such file or directory in drupal_get_installed_schema_version() (line 155 of /Users/my.name/Sites/proface/includes/install.inc).</p>

<h2>Additional</h2>

<p>PDOException: SQLSTATE[HY000] [2002] No such file or directory in system_list() (line 165 of /Users/my.name/Sites/clientnamedirectory/includes/module.inc).</p><hr />

Drush command terminated abnormally due to an unrecoverable error.

1
단계 를 완료 했습니까 ? 나는 그것이 당신의 문제가 아니라는 것을 알고 있지만 도움이 될 수 있습니다.
Chapabu

어떤 버전의 drush를 사용하고 있습니까? 당신과 동일한 것으로 보인다 문제가 있습니다 : drupal.org/node/832472은
F1234k

drush-7.x-4.5 버전과 drupal 7.9를 사용하고 있습니다.
FLY

내 질문에 따르는 단계를 추가했습니다. @Chapabu
FLY에서

1
- 당신은 (관련 드루팔되지 않음) PHP / MySQL의 연결에 문제가 stackoverflow.com/questions/2412009/...
클라이브

답변:


42

이것이 macOS에서 해결 한 방법입니다.

sudo mkdir /var/mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

출처 : Drush on Mamp 작업 .


나를 위해 그것은 "/ tmp"에서 mysql.sock 파일을 찾고있었습니다. 그래서 MAMP 설치에 대한 심볼릭 링크를 만들어야했습니다. 그에 부딪 치는 사람은 참고하십시오.
Patrick

37

Drupal 사이트에 대한 settings.php 파일의 데이터베이스 구성에서 호스트를 localhost 대신 127.0.0.1로 변경하십시오.

기본값을 바꾸십시오 : 'host'=> 'localhost',

'host'=> '127.0.0.1',

OS X XAMPP 에서이 오류가 발생했지만 솔루션도 여기에 적용되어야합니다. Clive가 언급했듯이 MySQL 연결 문제입니다. 이 게시물 은 근본적인 문제에 대해 더 자세히 설명합니다.


깔끔하고 간단한 솔루션. 그러나 사이트 단위로 작동하지만 여기에서 트릭을 만들었습니다.
이그나시오 세 구라 Postigo

더 인기있는 답변은 저에게 효과적이지 않습니다 (MAMP Pro를 사용하고 있습니다). 감사!
Kelley Curry

1
아니! 이렇게하면 Drush가 작동 할 수 있지만 그로 인해 Drupal이 실패하게됩니다.
sea26.2

11

설명

PDOException - 오류 2002 당신의 drush 소켓 파일 (예를 통해 MySQL의 로컬 데이터베이스 서버에 연결할 수 있다는 것을 의미합니다 /tmp/mysql.sock) 당신의 구성으로 php.ini.

이것은 실제로 drush자체적으로 관련이 없으며 PHP 구성이며 오류는 다음과 같이 재현 될 수 있습니다.

php -r "new PDO('mysql:host=localhost;port=3306;charset=utf8;dbname=dbname', 'root', 'root');"

고치다

MySQL이 올바르게 작동하면 다음 두 파일을 확인하십시오.

  1. mysql_config --socket

    또는: mysqladmin variables | grep socket

  2. php -i | grep -w default_socket

    또는: php -r 'phpinfo();' | grep -w default_socket

일치하고 동일한 파일을 가리키며 둘 다 존재합니다.

그렇지 않은 경우 다음 중 올바른 방법을 확인하십시오.

mysql --socket=/path/to/mysql.sock

다음 솔루션 중 하나를 사용하여 문제를 해결하십시오.

  • 작동하는 mysql.sock유닉스 소켓 을 가리키는 심볼릭 링크를 만드십시오 (MAMP의 경우 Andrew answer 참조 ).

    • 예를 들어 MAMP를 사용하는 경우 기본 위치에 대한 심볼릭 링크를 만들 수 있습니다.

      sudo ln -vs /Applications/MAMP/tmp/mysql /var/mysql
  • 당신의 올바른 경로 pdo_mysql.default_socket, mysql.default_socket또는 mysqli.default_socket당신의php.ini

  • 변수에 예를 들어 지정 unix_socket하십시오 settings.php.$databases

    $databases['default']['default'] = array(
      // ...
      'unix_socket' => '/var/mysql/mysql.sock',

문제 해결

다른 엣지 케이스는 다음과 같습니다.

  • 잘못된 권한 (예 : 상위 폴더)
  • 당신은 공간이 부족합니다
  • PHP 버전이 여러 개인 경우, 정확히 어떤 것을 사용하고 있고 어떤 설정을 변경하고 있는지 확인하십시오.
  • XDebug로 디버그 :

    • echo '<?php xdebug_start_trace("/tmp/foo.log");' > init.php
    • drush -c init.php ev 'Database::getConnection("default", "default");'
    • 또는 xdebug.show_exception_trace=1당신의 설정xdebug.ini
  • 디버그 : OS X에서 sudo dtruss -fn mysqld, Linux에서strace
  • 참조 : MySQL 연결이 작동하지 않습니다 : 2002 SO에 해당 파일이나 디렉토리가 없습니다.

6

MAMP Pro를 사용하고 있으며 동일한 문제가 있습니다. 내가 고칠 수있는 가장 쉬운 방법은 settings.php 파일의 $ database 배열에 다음 줄을 추가하는 것이 었습니다.

'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',

전체적으로 다음과 같아야합니다.

$databases = array (
    'default' =>
     array (
        'default' =>
        array (
            'database' => 'your_database_name',
            'username' => 'username',
            'password' => 'password',
            'host' => 'localhost',
            'port' => '',
            'driver' => 'mysql',
            'prefix' => '',
            'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
        ),
    ),
);

내가 얻는 정확한 오류는 다음과 같습니다.

예외를 처리하는 동안 잡히지 않은 추가 예외가 발생했습니다.

기발한

PDOException : SQLSTATE [HY000] [2002] drupal_is_denied ()에 해당 파일 또는 디렉토리가 없습니다 (2193 행 중 ...

추가

PDOException : SQLSTATE [HY000] [2002] _registry_check_code ()에 해당 파일 또는 디렉토리가 없습니다 (행 3477의 ...


복구 불가능한 오류로 인해 Drush 명령이 비정상적으로 종료되었습니다.


2
이것은 MAMP를 사용하여 나에게 가장 빠르고 쉬운 해결책이었다
개미

3

이전 답변과 비슷하지만 동일하지 않은 다음 단계 로이 문제를 해결했습니다.

심볼릭 링크를 추가하십시오 :

sudo mkdir /var/mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

사용중인 php.ini를 찾으십시오.

php -i | grep php.ini

php.ini에 다음 설정을 추가하십시오 :

pdo_mysql.default_socket= /var/mysql/mysql.sock
mysql.default_socket = /var/mysql/mysql.sock
mysqli.default_socket = /var/mysql/mysql.sock

1

PHP / SQL 구성의 구성 오류 때문입니다. 웹 서버에서 사용하는 소켓과 명령 줄에서 사용하는 소켓이 다르게 구성되어 있습니다. MySQL 구성을 검사하여 사용중인 유닉스 소켓을 확인한 다음 모든 php.ini 구성과 컴파일에 동일한 값이 사용되는지 확인하는 것이 좋습니다.

구성을 수정할 수없는 경우 다음 단계가 작동합니다.

  1. Drush 5.x (http://ftp.drupal.org/files/projects/drush-All-versions-5.x-dev.tar.gz)의 개발 버전을 가져 와서 대신 설치하십시오. 이것은 다른 문제를 일으킬 수 있지만 전반적으로 꽤 안정적입니다.
  2. Drupal sites settings.php에서 데이터베이스 연결에 대한 호스트 및 포트 설정을 제거하고 'unix_socket'=> '/path/to/mysql.sock'을 추가하여 바꾸십시오.

이 모든 것이 복잡해 보인다면, setting.php의 호스트를 localhost에서 127.0.0.1로 바꾸는 방법이 있습니다. 이렇게하면 사이트 속도가 느려지지만 개발 사이트에서는 눈에 띄거나 중요하지 않을 수 있습니다. 프로덕션 사이트의 경우 유닉스 소켓을 사용하고 구성을 정렬해야합니다.


이것이 실제로하는 일입니다. 나는 그것을 여러 번 테스트했습니다.
asiby

1

Mac에 drush를 설치하는 더 쉽고 대안적인 방법을 찾았습니다.

독립형 터미널에 붙여 넣어 homebrew 를 설치하십시오.

/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"

그런 다음 동일한 터미널에서 다음을 실행하여 drush를 추가하십시오.

brew install drush

돌진 상태를 실행하면 이제 정상적으로 실행됩니다.


1

MySQL의 MySQL.com 설치 작업을하고 있다면, .sock파일 의 올바른 위치에 PHP를 지정하면 됩니다.

에서 php.ini다음 두 줄을 추가 / 수정 하십시오 .

mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock

php.ini의 위치를 ​​찾으려면 (아직 존재하지 않을 수도 있음) 이것을 사용하십시오

php -i | grep php.ini

경우 php.ini파일이 아직 존재하지 않는, 그것을 만들 수 있습니다.


0

Drupal이 mysql 소켓을 찾을 수 없다는 다른 답변에 동의하십시오. 다른 답변은 도움이되었지만 공식 Oracle Mysql 서비스를 설치하여 설치하기에는 불완전했습니다. 즉, mysql.sock 파일의 기본 위치입니다. 다음은 사용 사례에 따라 권장되는 답변을 요약 한 것입니다.

공식 MAMP 패키지에 포함 된대로 mysql을 사용하는 경우 @Andrew Alexander의 답변을 사용하십시오.

sudo mkdir /var/mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

공식 Oracle MYSQL의 경우 :

sudo mkdir /var/mysql
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

0

MAMP 4 설정의 경우 솔루션은 "명령 행에서이 버전을 사용 가능하게하십시오"를 확인하고있었습니다.

MAMP 구성


0

터미널에 다음 메시지가 나타납니다.

(MAMP PRO + PHP 7)

복구 할 수없는 오류로 인해 Blockquote Drush 명령이 비정상적으로 종료되었습니다.
[오류] PDOException : SQLSTATE [HY000] [2002] Drupal \ Component \ DependencyInjection \ PhpArrayContainer-> createService () Blockquote에 해당 파일 또는 디렉토리가 없습니다.

지침 의 도움으로 문제를 해결했습니다.


0

로컬 mysql이 고유 포트 번호에서 실행되는 것을 잊었으므로 다른 로컬 사이트에서 구성을 검토 할 때까지 왜 이것을 얻었는지 혼란 스러웠습니다.

$databases['default']['default'] = array (
  'database' => 'hou',
  'username' => 'root',
  'password' => '',
  'prefix' => '',
  'host' => '127.0.0.1',
  'port' => '3306',
  'driver' => 'mysql',
  'collation' => 'utf8mb4_general_ci',
);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.