最近、私がWordPressで作ったサイトの記事が全部消えてしまい、バックアップデータから復元したということがあったので紹介します。
SWELLへテーマを乗り換えた結果、前のテーマで使っていた文字を装飾するショートコードが表示されなくなりました。SWELLからの乗り換えプラグインを利用できないテーマを使っていたので、ショートコードがそのまま記事に表示されてしまっていました。
WordPressのエラーメッセージが記事の最初に表示されるのと同じで、訪問者からすると「このサイト大丈夫?」と感じると思うので早めに修正したいところです。
しかし、記事の数が多すぎて1つずつ手作業で修正はとてもじゃないけど無理。ということで一括置換が簡単にできる方法はないかと考えた結果、Search RegexというWordPressのプラグインを使うのが1番簡単そうだということで導入してみました。
これが始まりです。
WordPressのサイトの記事が全部消えた!
WordPressのテーマを乗り換えたら色々対応しないといけないことがありますが、まずは緊急で対応が必要なレベルの記事の記述修正。私の場合はとりあえず訪問者からすると謎のコードが見えてるのを何とかしたかったので、対象のショートコードを全部削除することに。
一括置換や削除ができるWordPressのプラグイン「Search Regex」の使い方は簡単で、インストールした後、「ツール→Search Regex」で画面を開いて、検索のところに修正対象の文字列を書いて、操作はとりえあず「操作なし」を選択し、本当に削除して大丈夫なものだけがピックアップされているかを一応確認した後、ショートコードのみを削除。
「削除」を実行したあと、ショートコードがちゃんと記事から消えているか自分のサイトを確認すると、404 not found。
え?となって他の記事を開くとそこも404。その次も404。記事はどれも404。全部消えてる……
「やってしまった!」
トップページはある。サイトのレイアウトやデザインもそのまま。何百もの記事だけが全部消えている。
間抜けな話ですが、なんと私は対象のショートコードを消すのではなく、そのショートコードが入っている「投稿」自体を全て削除してしまいました。
「やばいやばい、間違って消してしまうなんて……早く復旧しないとその間に訪問してくれるはずだった人に記事が表示されない。」
記事そのものを削除してしまっているので、当然リビジョンを戻すなんていう対処法も取れません。幸いバックアップは取っているので最悪の自体は回避できる。急いで復旧作業に取り掛かりました。
エックスサーバーのバックアップからWordPressの記事データを復元する方法
バックアップはWordPressのプラグイン「BackWPup」で定期的にしていますし、まさかこんなことでミスるとは思っても見なかったので、直前のバックアップを取らずにSearch Regexを実行してしまいました。それがこのザマです……
したがって、バックアップデータも削除する直前のものではなく、少し前のものです。しかもBackWPupはフリー版だと、バックアップからデータを復元するためにはMySQLのデータベースを直接触らないといけないのでちょっとめんどくさい。
もう少し簡単に復元出来ないかなと考えたところ、私はエックスサーバーを使っているので、サーバーの自動バックアップ機能を使ってワンボタンで復元することにしました。
どのMySQLデータベースが消えたサイトのものかを調べて復旧します。エックスサーバーの自動バックアップ機能での復元のやり方は簡単です。
- エックスサーバーにログインする
- サーバー管理(サーバーパネル)の「WordPress簡単インストール」で、記事を消してしまったサイトのドメイン名を選択し、「MySQLデータベース名」を確認
- サーバーパネルの「MySQL復元」から、先ほど調べたデータベース名のデータベースの復元ボタンを押す
これだけです。復元ボタンを押したら「復元中」となりるので、少し待つとサーバーで自動バックアップされた時点のデータで復元されます。これで記事を消してしまった当日のバックアップデータを使って復旧完了です。
その日は記事以外には手をつけていなかったのが不幸中の幸い。直前にWordPressのテーマやウィジェットの設定部分もいじってたらそこもやり直しになるところでした。
WordPressサイトの記事データが無事バックアップから復旧されたのを確認後、改めてSearch Regexを使って不要なショートコードのみを削除しました。やり方は下記の記事で簡単に書いています。もちろん、直前にバックアップを取って実行しました。
最後に
今回は記事だけがごっそり消え、WordPressテーマのカスタマイズの設定などはそのままでした。今回は別の復元方法を採用しましたが、この場合はデータベースのwp_postsの部分だけ復旧するという対応も取れます。
それにしても、何百もの記事が全部消えた時はバックアップを取ってたとはいえ一瞬血の気が引きました……サーバーの自動バックアップ機能はやはりありがたい。今回は使いませんでしたが、念のため、BackWPupの定期バックアップの間隔も少し短くしておきました。
皆さんもバックアップはちゃんと直前にも取りましょう。