LoginSignup
3
3

More than 5 years have passed since last update.

アカウント情報が正しいのにデータベース接続エラー

Last updated at Posted at 2015-02-19

※対象のバージョンは4.1です

WordPressインストール時にwp-config.phpに正しいデータベース接続情報を入力してもinstall時にデータベース接続エラーが表示される場合があります

その調査・対処方法を記します

なぜデータベースエラーが起こるかを調査する

データベース接続処理はwp-admin/install.phpを見ると

wp-admin/intall.php
require_once( ABSPATH . WPINC . '/wp-db.php' );

で行っているようなのでその処理を見てみます

wp-includes/wp-db.phpの578行目にコンストラクタが定義されています

wp-includes/wp-db.php
    public function __construct( $dbuser, $dbpassword, $dbname, $dbhost ) {
        register_shutdown_function( array( $this, '__destruct' ) );

        if ( WP_DEBUG && WP_DEBUG_DISPLAY )
            $this->show_errors();

テスト用コードの実行

コンストラクタの実装はわかったので、wp-db.phpと同じディレクトリにテストコードを書いてみます

<?php
  require('./wp-db.php');
  $dbuser = 'wordpress';      #データベースに設定したユーザを指定してください
  $dbpassword = 'wordpress';  #上のユーザのパスワード指定してください
  $dbname = 'wordpress';      #データベース名を指定してください
  $dbhost = 'localhost';
  $db = new wpdb($dbuser, $dbpassword, $dbname, $dbhost);

そしてこちらを実行してみます
すると以下のようなエラーが表示されます

PHP Warning:  mysql_connect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /usr/local/apache2/htdocs/wp/wp-includes/wp-db.php on line 1416

ん?/tmp/mysql.sockにsocketファイルを探しに行ってるようです
実際にsocketファイルがどこにあるのか確認します

$ ps -ef | grep mysql
root     15423     1  0 Feb11 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql    15642 15423  0 Feb11 ?        00:06:43 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock

/var/lib/mysql/mysql.sockになってますね。。。

socketファイルのパス指定方法調査と修正

もう一度wp-db.phpを見てみると1370行目に

wp-db.php
$port_or_socket = strstr( $host, ':' );

という記述がある。ということは$dbhostを

localhost:/var/lib/mysql/mysql.sock

と指定すればよいということになります
テストコードで動作確認をし、エラーなくインスタンスの生成ができることを確認しました
※$port_or_socketという変数名ですがlocalhost:3306では動作しませんでした

wp-config.phpの修正

wp-config.php
define('DB_HOST', 'localhost:/var/lib/mysql/mysql.sock');

に修正してからインストールを実行するとエラーが解消されました

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3