対象読者
よくネットで見かける原因
- 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をインストールした場合などに起こるようです。
私はまさにそのパターンでハマりました。