Wordpressでパスワードやデータベース名は合っているのに「データベース接続確立エラー」が出てしまう

WordPressで「データベース接続確立エラー」が起きたので調べてみました。

データベース接続確立エラー
  • ユーザー名とパスワードが正しいか確認してください。
  • 正しいホスト名を入力しているか確認してください。
  • データベースサーバーが動作中か確認してください。

とありましたが、どれも今回は異なりMySQLソケット(mysql.sock)の位置の違いが原因でした。

エラーの確認

まずはwp-config.phpのデバッグ出力を変更してエラーの詳細を確認します。

define('WP_DEBUG', false);

define('WP_DEBUG', true);

ここで/wp-adminにアクセスすると、

Warning: mysqli_real_connect(): (HY000/2002): No such file or directory in /data/html/wordpress/wp-includes/wp-db.php on line 1444
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /data/html/wordpress/wp-includes/wp-db.php on line 1474
Warning: mysql_connect(): No such file or directory in /data/html/wordpress/wp-includes/wp-db.php on line 1474

のようなエラーが出ていました。

MySQLソケットの場所確認方法

自分のmysql.sockの場所を確認します。

mysql_config --socket

mysql_cofigコマンドを使用して確認すると以下の様になっていたのでこのソケット場所を設定します。

/var/lib/mysql/mysql.sock

と出てきたので、原因がWordPress標準では /tmp/mysql.sock を見に行くのに自分の環境ではソケットの場所が/var/lib/mysql/mysql.sockにあったことが原因だと分かりました!

修正方法

DB_HOSTを以下のように変更します。

define( 'DB_HOST', 'localhost' );

define( 'DB_HOST', 'localhost:/var/lib/mysql/mysql.sock' );

無事になおったのでdefine('WP_DEBUG', true);をfalseに戻して完了です🎉