PHP
MySQL
WorPress

Wordpress入れたら「データベース接続確立エラー」が消えない

More than 1 year has passed since last update.

対象読者

よくネットで見かける原因

  • wp-config.phpの設定が間違っている
  • パーミションに問題がある
  • MySQLも起動していない
  • データベースが壊れている

どれも当てはまらないのに「データベース接続確立エラー」が出る。
という人が対象です。

環境(私の)

  • centos 6.5(64bi)
  • PHP 5.6.10
  • MySQl 5.7.15

状況

  • 「データベース接続確立エラー」が出て先に進めない

調査1. なぜ接続出来ないのかを調査

  • wp-config.phpに、define('WP_DEBUG', true); の1行を追加します。
    • これでエラーが起きたときの原因を表示出来ます
PHP Warning:  mysql_connect(): No such file or directory in /home/deploy/web/releases/20160916035114/public_html/wp-includes/wp-db.php on line 1549

こんなのが出てました。
よくよく調べてみると、mysql.sockを探すことができず、PHPからMySQLへの失敗しているみたいです。
(私の場合は、コンソールからMySQLへの接続が出来たので不思議に思ってましたが納得です。多分普通にPDOとか使った接続も出来ないと思います)

調査2. mysql.sockはどこにあるのか

/etc/my.cnfに書いてあります。

# cat /etc/my.cnf | grep mysql.sock
socket=/var/lib/mysql/mysql.sock

調査3. pdoのデフォルトのMySQLのソケット参照の場所確認

$ php -i | grep mysql.sock
pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock

これです。実際にmysql.sockは、/var/lib/mysql/mysql.sockにありますが、
PHP側の設定では、/tmp/mysql.sockを参照する用になってます。

これを合わせる必要があります。

対応

対処するには、2種類あります。

  • MySQLのmysql.sockの場所を/tmp/mysql.sockに変える
  • /tmp/mysql.sockに、/var/lib/mysql/mysql.sockのシンボリックリンクを貼る

後者の方が楽なのでやってみましょう。

# ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
# ll /tmp/mysql.sock
lrwxrwxrwx 1 root root 25  9月 18 23:27 2016 /tmp/mysql.sock -> /var/lib/mysql/mysql.sock

これで、再度WordpressのインストールすればOK

原因

PHPをyumでインストールして、RPMでMySQLをインストールした場合などに起こるようです。
私はまさにそのパターンでハマりました。