回答:
サーバーがリストに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.phpphp.iniWebサーバーが使用するファイルを表示します。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.8mysqlサーバーにソケットがある場所を確認するには、次のコマンドを使用します。
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を使用できます。