web-dev-qa-db-ja.com

Drushを使用すると、 `PDOException:SQLSTATE [HY000] [2002] No such file or directory`が発生します

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.
21
Jack Ryan

これは私がmacOSでそれを解決した方法です:

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

出典: Damp with Drush on Mamp

42
Jack Ryan

Drupalサイトのファイルのsettings.phpにあるデータベース構成で、ホストをlocalhostではなく127.0.0.1に変更してみてください。

デフォルトを置き換えます: 'Host' => 'localhost'、

with: 'Host' => '127.0.0.1'、

OS X XAMPPでこのエラーが発生しましたが、解決策はここにも適用されるはずです。 Cliveが述べたように、これはMySQL接続の問題です。 この投稿 は根本的な問題について詳しく説明しています。

37
darkcody

説明

PDOException-エラー2002 は、_/tmp/mysql.sock_で構成されているソケットファイル(例:_php.ini_)を介してDrushがMySQLローカルデータベースサーバーに接続できないことを意味します。

これは実際にはdrush it-selfとあまり関係がありません。これはあなたのPHP構成であり、そのエラーは次のようにして再現できます。

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

修正

MySQLが正しく動作する場合は、次の2つのファイルを確認してください。

  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_ UNIXソケットを指すようにします(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そのようなファイルまたはディレクトリはありません at SO
11
kenorb

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 ...


6
digitalblake

以前の返信に似ていますが、同じではない次の手順でこれを解決しました。

シンボリックリンクを追加します。

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
3
ryrye

Macにdrushをインストールする簡単で代替的な方法を見つけました:

インストール homebrew これをスタンドアロンのターミナルに貼り付けて

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

次に、同じターミナルから次のコマンドを実行して、Drushを追加します

brew install drush

実行中のDrushステータスは正常に実行されます。

1
FLY

これは、PHP/SQL構成の構成エラーが原因です。 Webサーバーが使用するソケットとコマンドラインが使用するソケットの構成が異なる。 MySQL構成をチェックして、使用されているUNIXソケットを確認し、すべての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に変更することもできます。これによりサイトの速度は低下しますが、開発サイトでは目立たないか、重要ではない場合があります。本番サイトでは、UNIXソケットを使用する必要があり、構成を整理する必要があります。

1
Kjartan

MySQLのMySQL.comインストールを使用している場合は、PHPを.sockファイルの正しい場所に指定するだけです。

php.iniで、次の2行を追加/修正します。

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

Php.iniの場所を見つけるには(まだ存在していない可能性があります)、これを使用します

php -i | grep php.ini

php.iniファイルがまだ存在しない場合は、作成します。

1
Chris Burgess

ローカルのmysqlが一意のポート番号で実行されることを忘れていたため、別のローカルサイトで構成を確認するまで、これが取得される理由がわかりませんでした。

$databases['default']['default'] = array (
  'database' => 'hou',
  'username' => 'root',
  'password' => '',
  'prefix' => '',
  'Host' => '127.0.0.1',
  'port' => '3306',
  'driver' => 'mysql',
  'collation' => 'utf8mb4_general_ci',
);
0
powpow12

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
bdombro

MAMP 4セットアップの場合、解決策は「このバージョンをコマンドラインで使用可能にする」をチェックすることでした。

MAMP configuration

0
Shaun Dychko

ターミナルで次のメッセージを受け取りました:

(MAMP PRO + PHP 7)

回復不可能なエラーが原因で、Blockquote Drushコマンドが異常終了しました。
[エラー] PDOException:SQLSTATE [HY000] [2002] Drupal\Component\DependencyInjection\PhpArrayContainer-> createService()Blockquoteにそのようなファイルまたはディレクトリはありません

私はこれらの助けを借りて問題を解決しました 手順

0
lesley n.