回答:
サーバーがリストにapp/etc/local.xml
ありlocalhost
、Magentoのエラーログにこのエラーが表示されているが、Magento が正常に実行されている場合、mysqlが再起動され、ソケット/tmp/mysql.sock
または設定されているソケットファイルがmy.cnf
一時的に消えます。
欠落しているため、PDO mysqlコネクターはレポートします SQLSTATE[HY000] [2002] No such file or directory
このエラーが継続的に発生し、Exception Errorページ以外にMagentoにアクセスできない場合、mysqlは完全にクラッシュしているため、ホスティングプロバイダーがmysqlの原因を見つけて再起動する必要があります。
私はこれと同じ問題を抱えていたので、以下で使用するPHPを選択しました。 /usr/local/etc/php/7.2/bin/php bin/magento setup:di:compile
公式ドキュメントを参照してください: SQLSTATE [HY000] [2002]そのようなファイルまたはディレクトリはありません
これは一般に、Webサーバーと比較してPHPコマンドラインで使用されているPHPの異なるインスタンスが原因です。特に、mysql.sock
これが当てはまる場合、設定が誤っている可能性があります。
PHPの1つのインスタンスを使用しているかどうかを判断するには:
次のコマンドを入力します。
php -i | grep 'php.ini'
これにより、PHPコマンドラインインターフェイス(CLI)で使用される設定が決まります。どこにphp.ini
あるかに注意してください。
phpinfo.php
は、Webサーバーでセットアップします。phpinfo.php
のいずれかでphp -i
。phpinfo.php
php.ini
Webサーバーが使用するファイルを表示します。PHPの内容と異なる場合php.ini
は、PHP CLIとWebサーバーの両方ですべてのPHP設定を一貫させる必要があります。
詳細については、Webサーバーに付属のドキュメントを参照してください。
シェルを介して複数のバージョンのPHPを利用できます。phpを入力してTab キーを押すと、オートコンプリートがどのバージョンを認識しているかがわかります。
私にとって、PHP 5.4、5.5、および5.6はすべて正常に機能していましたが、PHP 7はmysql.sockを見つけられず、この質問で説明した「SQLSTATE [HY000] [2002] No such file or directory error」でクラッシュしていました。
# Prints [ok]
echo "<?php print(new mysqli('localhost', 'root', 'root', 'mysql') ? '[ok]' : '[error]').PHP_EOL; ?>" | php-5.6.20
# Prints [error] and shows a warning
echo "<?php print(new mysqli('localhost', 'root', 'root', 'mysql') ? '[ok]' : '[error]').PHP_EOL; ?>" | php-7.0.8
mysqlサーバーにソケットがある場所を確認するには、次のコマンドを使用します。
cat /etc/mysql/my.cnf | grep socket
私の場合、Percona Mysqlが私の浮浪者システムにインストールされていると、たまたまソックソケットファイルがここに存在していました。
/var/run/mysqld/mysqld.sock
(単にmysqlではなくmysqldと呼ばれることに注意してください)
いくつかのバージョンのphpを選択できますが、これらのコマンドにより、問題のあるバージョンと問題のないバージョンがわかりました。
私にとっての答えは、/ tmp / mysql.sockと/var/run/mysqld/mysqld.sockの間にシンボリックリンクを作成するために、vagrantプロビジョニングスクリプトにコードを含めるだけでした。
if [ ! -L /tmp/mysql.sock ]; then
echo "Creating symbolic link for php 7 to connect to mysql.sock"
ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
fi
新しいシンボリックリンクが配置されると、以前に指定されたテストスクリプトがすべてのバージョンのPHPで完全に機能するようになり、127.0.0.1の IPアドレスを指定する代わりに、コードでlocalhostを使用できます。