突然のエラーの対処とWordPressの記事復旧まで。

6日の朝に目が覚めた時にスマートフォンで自分のブログのページを開いてみると、見たことが無い文字になっていました。
表示されていたのは、「データベース接続確立エラー」という大きくゴシック体で一行だけのエラー画面でした。

2018-01-07_04-00-33

今回は文字多めです(笑)。
自宅のインターネット接続が切れているのかと一瞬思いましたが、それとは文言が違いますし、他のメールなどは確認できていたので原因は他にあると思い、調べて対応しました。

このブログはWordpressで運用されていますが、Wordpressはブログのデザインや表示などの「テンプレート部分」と、実際の記事やコメント、各種設定部分などを管理する「データベース部分」の2つから成り立っています。
この2つが連携しあって初めてWordpressのブログがブラウザで表示されるのですが、どうやらこの連携が無くなってしまい、エラーになっているようです。Wordpressの管理画面にすら入ることができなくなっていました。レンタルサーバのコントロールパネルにはログインできるので、サーバ自体ではなくWordpressの問題であると判断。

私が契約しているレンタルサーバでは、Wordpressのインストールが1クリックで行えますが、連携するデータベースはMySQLで手動で作成します。
実は先日、契約を切り替えるためにこのレンタルサーバをいったん解約して再契約するということをしていました。その際に色々なサイトを参考にして再契約先のサーバ領域にブログのデータを移行したのですが、その際にWordpressのシステムファイルである、wp-config.phpファイルも上書きコピーしてしまったのです。
これがどうやら事の原因のようでした。

理由としては、旧サーバのwp-config.phpファイルには、当然ながら旧サーバの契約内で作成していたデータベースサーバとの連携情報が書かれています。
下のような部分ですね。ファイルはWindowsのメモ帳などでは開かない方が良いです。UTF8という文字コードを認識できるテキストエディタで開くことをお勧めします。

define('DB_NAME', '******************'); ← ****~はデータベース名
define('DB_USER', '***********'); ← ****~はサーバへのログインユーザー名
define('DB_PASSWORD', '********'); ← ****~はサーバへのログインパスワード
define('DB_HOST', '********.db.*******.ne.jp'); ← ****~はサーバ名
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');

上記の各種情報が旧サーバ契約のデータベースを指してしまっていたために、契約を切り替えた後もずっと前のデータベースと連携接続されていたようです。切り替え後のブログ記事も旧契約のデータベースに書き込み続けていて、契約が終了した時点でデータべースが無くなったことがエラーの原因でした。
Wordpressの領域は新しいサーバ、データベースは古いサーバというおかしな状態のまま、運営してしまっていました。これを「移行完了した」と勘違いしてしまったのが今回の敗因です。

また、同じファイル内に以下のような記述もあります。

$table_prefix = '*******'; ← ****~はDB作成時に設定した任意の文字列

WordPressを新規作成する際に、データベースを識別するための接頭語を作成時に任意で付与しています。ここも連携するためには重要な項目です。ここは後述します。

キャプチャ2

WordPress自体はきちんとテンプレートも含めて移行できていたので、今回の原因とされるデータベース部分のみ移行・インポートしました。契約を切り替えた際に、phpMyAdminというサーバ側で用意されたMySQLの管理ツールを使ってDBを全てエクスポートしていましたので、同じツールを使ってインポートします。ファイルサイズは45MBほどでした。
ただ、今回のサーバではインポート時に約16MB程度のファイルしか対応していないので、エラーとなってインポートできませんでした。結果、TeraTermを使ってSSH接続し、以下のコマンドでインポートしました。
エクスポートしたSQLファイルは事前にFTPでサーバ内の任意の場所にアップロードしておきました。

まずはSSH接続して、アップロードした場所へ移動しておきます。そして以下のコマンドを実行します。

mysql --host=[データベースサーバ名] --user=[ユーザー名] --password=[パスワード]

mysql> use [作成しておいたデータベース名]

mysql> \. [アップロードしたSQLファイル名]

これでデータベースのインポートまでが完了しましたが、このデータベースの各種テーブル名は古いデータベースの時に設定した接頭語になっているので、先述したwp-config.php内の接頭語に関する部分も今回インポートしたテーブルの接頭語に変更しておきます。その後新しいレンタルサーバのWordpress領域に上書きアップロードします。
これで連携情報も新しいもので書き換えられて、連携情報が復旧しブログが元通り運用できるようになりました。
この接頭語に関する作業は、ランダムなものではなく、自身で設定しているのであれば作業は不要な場合もあります。

バックアップ用のWordpressプラグインも移行時に無効化になったままでバックアップも取れていなかったので、2017/12/12以降に投稿した記事はデータが無い状態。どうしようか悩んでいたところ、いつも記事購読の為に使っているFeedlyというサービスで自分のブログ記事のデータが残っていることに気付きました。

Welcome to Feedly
https://feedly.com/

ここからは手動でしたが、Feedlyからコピー & ペーストで記事を投稿しなおして復旧させました。やはり常日頃からのバックアップは大事ですね。仕事では気を付けているものの、プライベートではついさぼってしまっていたのが今回は災いしました。

キャプチャ

さらに助かっていたのはブログ記事の画像データはすべてFlickrにアップロードして記事内で参照させていたことです。画像の再アップロードの必要もありませんでした。

ブログの移行はそう頻繁に行うことではないと思いますが、データの移行はパソコンのファイルコピーとは違って、サーバの知識が必要になるので、慎重に行うことをお勧めします。
今回の復旧には途中外出していたものの、丸一日かかってしまいました。

にほんブログ村 携帯ブログ Androidへにほんブログ村 携帯ブログへにほんブログ村 携帯ブログ NTTドコモへにほんブログ村 携帯ブログ スマートフォンへにほんブログ村 PC家電ブログ デジモノへにほんブログ村 PC家電ブログ 家電・AV機器へ

Leave a Reply

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください