独身アラフォー女の趣味と仕事と思い出話

WordPressドメイン変更でデータベース接続確立エラー原因と対処法

このブログは2012年にレンタルサーバーにWordPressをインストールして作成したものだ。
レンタルサーバーのサブドメインで4年半運用(完全放置)していたが、
この度「ちゃんと運用しよう」と思い立ち、まず独自ドメインを取得しDNS設定をした。

だがしかし、いきなりトラブルの発生である。
ブログにアクセスしたら「データベース接続確立エラー」が発生したのだ。
googleで検索しまくっても原因の特定ができず、大ハマりしたので経緯と対処法を記しておく。

環境

○レンタルサーバー
ロリポップ(ライトプラン)
○Wordpressバージョン
WordPress 4.7.3

作業概要

目的
本ブログのドメインを、ロリポップのサブドメインから独自ドメインに変更したい
手順
①独自ドメインを取得し、ロリポップでDNS設定を行う
②サーバーで新しいフォルダを作成し、新しくでWordpressをインストールする。
③旧WordPressデータをエクスポートし、新WordPressへインポートする。
④旧ドメインから新ドメインへ301リダイレクトをかける。

(旧)http://terette.chu.jp/blog/

    ↓301リダイレクト↓

(新)http://terette.com/essay/

—————————————————–
<追記>
常時SSL化を実施したため、
現在、実際のURLは「https://~」になっている。
—————————————————–

エラー発生状況

もう、工程の序盤でエラーが発生した。
①のDNS設定が完了すれば、旧サイトへサブドメインでも独自ドメインでもアクセスできるはずだ。
ところがサブドメインでは今まで通り問題なくサイトが表示されるが、
独自ドメインのURLでアクセスすると「データベース接続確立エラー」と表示される。
データベース接続確立エラーの画面キャプチャ

は?なんだこれ、意味わからん。

ここでまず疑ったのは、DNS設定がまだ完了してないんじゃね?っていう。
でも「データベース接続確立エラー」が表示されるってことは、
データベースにアクセスしようとしてなんらかの理由ではじかれてるってことだ。
そもそもDNS設定が未完了なのであれば404エラーになるんじゃないか?

ちなみに、エラーのことはひとまず置いといて、②のサーバーで新しいフォルダを作成し、
新しくWordpressをインストールしようとしたら”失敗”になってできなかった。
FTPでフォルダの中身を確認するとデータベース情報が書かれるファイルが見当たらない。
つまり、やはりデータベースに接続できなくてインストールに失敗していると考えられる。

google先生に聞いてみよう。

「データベース接続確立エラー」とは

そもそもデータベース接続確立エラーとは、WordPress環境で発生するらしい。
WordPressからデータベースに接続できない状況である。

調べたところ、このエラーの原因のほとんどが「wp-config.php」の設定ミスとのことだ。
特にMySQLのパスワードを変更してしまった場合などに、この状況に陥る人が多い。
他にはデータベースの破損などが考えられる。

私は今回の作業工程でwp-config.phpどころか、どのphpファイルも触っていないはずだ。
それにMySQLのパスワードの変更も行っていない。
データベース破損についても、それなら旧ドメインでもエラーが発生するはずだから考えにくい。
とにかくどれも腑に落ちないが、一つ一つ確認して潰していくしかなさそうだ。

①wp-config.php記述ミスを疑ってみる

wp-config.phpは、WordPressがインストールされているルートディレクトリにある。
これをFTPでダウンロードして開いてみる。
調べたところ、下のMySQL設定の4項目で間違っている場合が多いらしい。

/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'database_name_here' );

/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'username_here' );

/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'password_here' );

/** MySQL のホスト名 */
define( 'DB_HOST', 'localhost' );

項目設定の照合方法は、レンタルサーバーの管理ページなどで確認できる。
私の場合はロリポップなので、ユーザー専用ページ>WEBツール>データベースのページで確認。
データベース情報の画面キャプチャ

うーん…やっぱり間違ってないんだよなぁ。
どう考えても原因はwp-config.phpの記述ミスではなさそうだ。

②データベース破損を疑ってみる

wp-config.phpをチェックしても問題が解決しない場合は、他の原因を疑う。
まず疑うべきはデータベースのテーブル破損ということなので、見てみよう。
データベースの状態を確認するにはphpMyAdminにアクセスする。
ロリポップでは、先程のデータベースのページから【phpMyAdminを開く】ボタンをクリックする。
phpMyAdminの画面キャプチャ

テーブルが破損していたりすると、テーブル名の行に「使用中」などと表示されるらしい。
破損が確認できたら、テーブルにチェックを入れて【テーブルを修復する】を行えば修復が可能だ。
しかしやはりデータベースに問題はなさそうだ。
いよいよ八方塞がりである。

突然原因を発見する

もう…ダメだ…。
ロリポップに問い合わせしよう。
ってことで、経緯と状況など詳細に記載してメールフォームから送信。
原因と解決方法と回答を待つ。

しかし返事をおとなしく待っていられる性格ではないので、
ロリポップのユーザー専用ページを片っ端からポチポチして探っていると。
PHPのバージョンが違うんだよなぁ。
実は今回のトラブルの序盤でこれには気づいていた。
しかしPHPのバージョンは関係ないだろうとスルーしていたのだ。
や、待て待て、なんかPHP7.1に関する案内が出ているではないか。
PHP設定の画面キャプチャ

「事前にこちらをご確認ください」っていうリンクを開いてみる。

あぁぁぁぁぁぁぁぁぁぁぁっ!
そういうことかよっ!
これかっ!

——————————–
簡単インストールが失敗したり、サイトで「データベース接続確立エラー」が表示される場合、データベースのパスワード形式が影響している可能性があります。
ロリポップ!で提供しているPHP7.1では、セキュリティレベルが高いデータベース接続方法を採用しており、PHP7.1を利用しているドメインから、古いパスワード形式である「old_password形式」を利用しているデータベースへの接続を行うことができません。(ロリポップより引用)
——————————–

つまり、PHPバージョンが7.1で、セキュリティレベルの高い接続方法を行おうとしてもデータベース設定が古いパスワード形式「old_password形式」だったため不整合が起き接続ができなかったのだ。

解決方法は、古いパスワード形式で接続できるよう新ドメインのPHPバージョンを下げるか、PHP7.1のままデータベースのパスワード再設定を行い、パスワード形式を「old_password形式」から「native_password形式」に変更すればいい。

PHPバージョンを下げる方が”ここをこう…ポチっとな”で作業は完了するが、やはりセキュリティ面を考えると最新バージョンを利用する方が好ましいのだろう。
データベースのパスワード形式変更方法の詳しい手順は、下記リンク先に記載がある。

ロリポップよくある質問>PHP7.1利用のドメインで簡単インストール、サイト表示ができません。

これにて無事解決。
このあと、これと同じ内容でロリポップのサポートから丁寧な返信をもらった。
ちなみにエラー発生から解決までになんと3日もかかった。

コメント (12)
  1. ふみ より:

    ありがとうございます!
    全く同じ事象で一週間ほどどハマりしていたので、本当に助かりました!

  2. てれってー より:

    >ふみさん
    コメントありがとうございます!
    この事象に関して情報がなかったので、私もどハマりしました。お役にたてて良かったです。

  3. manabujp より:

    この記事で助かりました。ありがとうございます^^

  4. てれってー より:

    >manabujpさん
    コメントありがとうございます!
    お役に立てて嬉しいです^^

  5. C&C より:

    この記事みるまで結構はまってました( ;∀;)
    助かりました。
    ありがとうございます。

  6. てれってー より:

    >C&Cさん
    コメントありがとうございます!
    やっぱハマりますよねぇコレ。お力になれたようでよかったです。

  7. とも より:

    こちらの記事に救われました!
    本当にありがとうございます m(_ _)m

  8. てれってー より:

    >ともさん
    コメントありがとうございます!
    この記事がお役に立てたようで嬉しい限りです^^

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です