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.
これは私がmacOSでそれを解決した方法です:
Sudo mkdir /var/mysql
Sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock
出典: Damp with Drush on Mamp 。
Drupalサイトのファイルのsettings.phpにあるデータベース構成で、ホストをlocalhostではなく127.0.0.1に変更してみてください。
デフォルトを置き換えます: 'Host' => 'localhost'、
with: 'Host' => '127.0.0.1'、
OS X XAMPPでこのエラーが発生しましたが、解決策はここにも適用されるはずです。 Cliveが述べたように、これはMySQL接続の問題です。 この投稿 は根本的な問題について詳しく説明しています。
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つのファイルを確認してください。
_mysql_config --socket
_
または:_mysqladmin variables | grep socket
_
_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',
_
その他のエッジケースは次のとおりです。
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
_を設定しますSudo dtruss -fn mysqld
_、Linuxではstrace
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 ...
以前の返信に似ていますが、同じではない次の手順でこれを解決しました。
シンボリックリンクを追加します。
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
Macにdrushをインストールする簡単で代替的な方法を見つけました:
インストール homebrew これをスタンドアロンのターミナルに貼り付けて
/usr/bin/Ruby -e "$(curl -fsSL https://raw.github.com/Gist/323731)"
次に、同じターミナルから次のコマンドを実行して、Drushを追加します
brew install drush
実行中のDrushステータスは正常に実行されます。
これは、PHP/SQL構成の構成エラーが原因です。 Webサーバーが使用するソケットとコマンドラインが使用するソケットの構成が異なる。 MySQL構成をチェックして、使用されているUNIXソケットを確認し、すべてのphp.ini構成とコンパイルで同じ値が使用されていることを確認することをお勧めします。
設定を修正できない場合は、次の手順が機能するはずです。
これらすべてが複雑に思われる場合は、setting.phpのホストをlocalhostから127.0.0.1に変更することもできます。これによりサイトの速度は低下しますが、開発サイトでは目立たないか、重要ではない場合があります。本番サイトでは、UNIXソケットを使用する必要があり、構成を整理する必要があります。
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
ファイルがまだ存在しない場合は、作成します。
ローカルのmysqlが一意のポート番号で実行されることを忘れていたため、別のローカルサイトで構成を確認するまで、これが取得される理由がわかりませんでした。
$databases['default']['default'] = array (
'database' => 'hou',
'username' => 'root',
'password' => '',
'prefix' => '',
'Host' => '127.0.0.1',
'port' => '3306',
'driver' => 'mysql',
'collation' => 'utf8mb4_general_ci',
);
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
ターミナルで次のメッセージを受け取りました:
(MAMP PRO + PHP 7)
回復不可能なエラーが原因で、Blockquote Drushコマンドが異常終了しました。
[エラー] PDOException:SQLSTATE [HY000] [2002] Drupal\Component\DependencyInjection\PhpArrayContainer-> createService()Blockquoteにそのようなファイルまたはディレクトリはありません
私はこれらの助けを借りて問題を解決しました 手順