web-dev-qa-db-ja.com

警告:mysqli_real_connect():(HY000 / 2002):/private/tmp/wordpress/wp-includes/wp-db.phpの1452行にそのようなファイルまたはディレクトリはありません

PHPUnitを実行してWordPressプラグインを単体テストしようとしていますが、タイトルのエラーが何度も表示されます。

WP-CLIを使用して単体テストをセットアップしましたが、WP-CLIを実行しようとすると、同様のエラーがスローされます。

MAMPを使用してデータベースを実行しています。

私はWP-CLIとPHPUnitをpharとしてセットアップしました。これらは〜/ .bash-profileでエイリアス化され、OS Xによって提供されるデフォルトの「php」で実行されました。これを変更し、WP-CLIとPHPUnitを最新のPHP MAMPによって提供されるバージョンはWP-CLIを修正しました(実行中であり、データベースに正常に接続していました)が、PHPUnitは依然として同じエラーをスローしていました。

Wp-config.phpファイルを編集して、ホストを「:/path/to/mamp/mysql.socket」、「localhost:/path/to/mamp/mysql.socket」、「127.0.0.1」に設定してみました"、どれも助けにはなりませんでした。

私は完全に行き詰まっているので、次に何を試したらいいのかわかりません。

6

このエラーが発生しました-wp-config.phpが指定しているスキーマが存在することを確認しましたか?

私の場合、あえて作成するのを忘れていたので、修正はCREATE DATABASE wordpressと同じくらい簡単でした。

wp-config.phpデータベースホストが間違っている場合にもこのエラーが発生しました(localhost127.0.0.1を交換してみてください)。

17
Doug Thompson

まず、MySqlが実際に実行されていることを確認します。プロセスが開始されていない場合、ソケットファイルは作成されません。

_netstat -tulpn | grep mysql
_

または

_ps -e | grep mysql
_

MySqlが実行中の場合、wp-config.phpでデータベースホストをlocalhostから_127.0.0.1_に変更すると機能しますが、これは回避策にすぎません。

localhostを指定すると、mysqli_real_connect()関数は、見つからないUnixソケットを介してデータベースに接続しようとします(そのため、「no such file」エラーが発生します)。_127.0.0.1_、デフォルトのTCPポート(通常3306))を使用してデータベースに接続しようとします。

PHPがMySqlソケットの場所を知らないという問題は修正されません。_php.ini_で次のオプションを設定する必要があります。ソケットの場所は、お使いのOSでも、通常は_locate mysql.sock_を実行して見つけることができます。CentOS6.8で動作する設定は次のとおりです。

php.ini

_pdo_mysql.default_socket = /var/lib/mysql/mysql.sock
mysqli.default_socket = /var/lib/mysql/mysql.sock
_

他のシステムでは一般的に_/tmp/mysqld.sock_を使用します。 MySql構成ファイル_my.cfg_を確認することで、構成された場所を確認できます。

正しいソケットの場所を指すようにPHPを構成したら、Apache/nginxを再起動して、新しい設定を有効にします。

これで、意図したとおりにlocalhostを使用できます。

9
Nilpo

PhpMyAdminに移動し、データベースをクリックして、サービスが実行されている場所のIPをコピーし、wp-config.phpファイルを置き換えます。

/ ** MySQLホスト名*/define( 'DB_Host'、 'localhost');

/ ** MySQLホスト名*/define( 'DB_Host'、 'ip_where_is_running_mysqlserver');

Localhostを実行中のMySQLサーバーのIPに置き換えます

1
Gilson Jelembi

それは私を混乱させました、しかし私は結局解決しました。

私のMySQLポートは3308なので、「127.0.0.1」を「localhost:3308」に変更します

$cfg['Servers'][$i]['Host'].

できます!

また、設定

$cfg['Servers'][$i]['controluser'] = '';

$cfg['Servers'][$i]['controlpass'] = '';

そして...

$cfg['Servers'][$i]['auth_type'] = 'cookie';

しかし、最も重要なことはポートの変更です。

0
Vicar