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


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
これらの手順を完了しましたか?正確にはあなたの問題ではないかもしれませんが、助けになるかもしれません。
チャパブ

どのバージョンのDrushを使用していますか?あなたと同じように見える問題があります:drupal.org/node/832472-F1234k
1

私は、バージョンdrush-7.xの-4.5とのDrupal 7.9を使用しています
FLY

私が質問に従った手順を追加しました。あなたが@Chapabuをスジェスティングしている同様のステープのような継ぎ目
FLY

1
あなたは、PHP / MySQLの接続の問題(関連Drupalのではない)を持っている- stackoverflow.com/questions/2412009/...
クライヴ

回答:


42

これは私がmacOSでどのように解決したかです:

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

出典:MampでのDrushの操作


私にとっては、mysql.sockファイルの「/ tmp」を探していました。そのため、MAMPインストールへのシンボリックリンクを作成する必要がありました。それに遭遇した人のためだけに参考にしてください。
パトリック

37

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

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

with: 'host' => '127.0.0.1'、

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


きちんとしたシンプルなソリューション。ただし、サイトごとに機能しますが、ここでトリックを作りました。
イグナシオセグラポスティゴ

より一般的な答えは私には機能しません(私はMAMP Proを使用しています)が、これは機能します。ありがとう!
ケリーカレー

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が正常に機能する場合は、次の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.sockUNIXソケットを指すシンボリックリンクを作成します(MAMPについては、Andrewの回答を参照)。

    • たとえば、MAMPを使用している場合、デフォルトの場所へのシンボリックリンクを作成できます。

      sudo ln -vs /Applications/MAMP/tmp/mysql /var/mysql
  • あなたの正しいパスpdo_mysql.default_socketmysql.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構成の構成エラーが原因です。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サイトのsettings.phpで、データベース接続のホストとポートの設定を削除し、「unix_socket」=>「/ path / to / mysql.sock」を追加してそれらを置き換えます。

これがすべて複雑に思える場合、別の方法は、setting.phpのホストをlocalhostから127.0.0.1に変更することです。これによりサイトの速度は低下しますが、開発サイトでは目立たないか重要ではない場合があります。本番サイトでは、Unixソケットを使用するため、構成を整理する必要があります。


これは本当にそれをするものです。私はそれを何度もテストしました。
asiby

1

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

これをスタンドアロン端末に貼り付けて自作をインストールします

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

次に、同じ端末から次を実行してブラシを追加します

brew install drush

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


1

MySQL.comのMySQLのインストールを使用している場合、.sockファイルの適切な場所にPHPを向けるだけです。

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

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.