WordPressの復活 その2: データの復活

データのインポート

前回はバックアップしたWordPressを復活させる前に、必要なソフトウェアパッケージをインストールしました。

今回はいよいよWordPressのデータを復活させて行きます。なお、データのバックアップ作業はこちらで紹介しています。

「WordPress 引越し」をキーワードにいろいろなサイトを調べたのですが、結構苦労しました。

誤算と解決方法

最初はバックアップしたデータ(MySQLのデータ)を書き戻すだけで簡単にできると思っていました。

他のサイトの記述でも、WordPressを使用するサイトのドメイン名が変わらないのならば、MySQL内のデータベースをコピー(ダンプ&インポート)するだけということだったのですが、私の場合はWordPressにログインすると画面が真っ白になってしまい、どうしてもうまくいきませんでした。

いま思えば「WP_DEBUG」を「ture」にすれば何か分かった気がしますが、この時はそれも思いつかず、対処法がありませんでした。

結局、いろいろ調べた挙句、

  • WordPressのデータベースのうちwp_options以外のテーブルを書き戻す

という作戦で何とかWordPressを復活させることができました。

テーマとプラグインの書き戻し

まずテーマとプラグインを書き戻します。私の場合はwp-contetnディレクトリごとバックアップしましたので、これを/var/lib/wordpressに書き戻します。

DebianのパッケージのWordPressを利用する場合、テーマ・プラグインなどユーザが変更するデータは/usr/share/wordpressではなく/var/lib/wordpressにおかれますので注意してください。

cd /var/lib/wordpress
sudo mv wp-content wp-content.orig
sudo mkdir wp-content
cd wp-content
sudo tar xfvz uploads.tgz 

上記の例では念のため/var/lib/wordpressを別名に変えてから(バックアップしてから)、バックアップしておいたファイルを展開しています。

アップロードデータの書き戻し

次に画像などアップロードしていたデータを書き戻しします。これはファイルを展開するだけなので簡単です。私の場合は/www以下にアップロードするようにしていたので、このディレクトリを作成してからバックアップしたファイルを展開します。

sudo mkdir /www 
cd /www 
sudo tar xfvz uploads.tgz 

なお、設定によってはアップロードデータはwp-contentディレクトリ内におかれます。その場合は上記のテーマとプラグインの書き戻しと一緒にアップロードデータも書き戻されているので、このステップは不要です。

重要なのは、アップロードデータ・プラグイン・テーマに関しては単に元の場所にコピーしなおすだけでよい、ということです。

データベースの復活

ここからが問題のWordPressのデータベースの復活作業です。

なかなか苦労しましたがとりあえず以下の方法で投稿などは復帰できることを確認しました。

wp_optionsテーブルを除去したデータベースの作成

いろいろ試したところ、WordPressのデータベースのうち、wp_optionsテーブルを書き戻すといろいろトラブルが発生することがわかりました。

そこで、バックアップしておいたWordPressのデータベースからwp_optionsテーブルを除去したデータを用意しておきます。

WordPressのデータベースのバックアップ時にwp_options以外をバックアップしたデータがあれば、このステップは不要です

私はバックアップ時にWordPressのデータベースをすべてバックアップしてしまったので、いったんバックアップデータを復帰させ、wp_optionsテーブルを無効にした後に再度バックアップすることで、このデータを用意しました。

mysql -u root –p
mysql> CREATE DATABASE データベース名;
mysql> USE データベース名;
mysql> source WordPressのバックアップデータ;
mysql> DROP TABLE wp_options;
mysql> exit;
mysqldump -u root データベース名 -p > backup_no_wp_options.sql
mysql -u root -p
mysql> DROP DATABASE データベース名;
mysql> exit;

mysqlコマンドあるいはmysqldumpコマンドを実行するとパスワードの入力が要求されるので、MySQLのインストール時に設定したrootのパスワードを入力してください。

行っている処理は

  • 2行目で一時的にインポートするデータベースの作成(WordPressで使っていたものと同じデータベース名とする)
  • 3~4行目でバックアップデータのインポート
  • 5~6行目でwp_optionsテーブルの削除
  • 7行目でwp_optionsテーブル以外のバックアップデータの作成、
  • 8~10行目で一時的に作成したデータベースの破棄

となります。

データベースの作成

WordPress用のデータベースをMySQLに作成します。これは以前使っていたものと同じ名称にしておいた方が無難だと思います。

Debianの場合はwordpressパッケージにsetup-mysqlというスクリプトがついてくるので、このスクリプトを用いてデータベースを作成します(同時にWordPressの設定ファイルも作成してくれます)。

zcat /usr/share/doc/wordpress/examples/setup-mysql.gz > setup-mysql
sudo bash setup-mysql –n データベース名 サイトのURL

これでMySQLに「データベース名」で指定したデータベースが作成されます。また、/etc/wordpressに「config-サイトのURL.php」というファイルができているはずです。このファイルはいったんどこかに保存しておき、バックアップしていたetcディレクトリの中から同名のファイルを取り出しておきます。

cd /etc/wordpress
sudo mv config-サイトのURL.php config-サイトのURL.php.orig
sudo cp -a /etc/backup/wordpress/config-サイトのURL.php .

そしてこの「config-サイトのURL.php」のDB_PASSWORDを設定している行を別名で保存しておいた設定ファイル(config-サイトのURL.php.orig)の記述と同じものにしておきます。

また、「define(‘WPLANG’, ja);」という行がない場合は追加しておくとよいでしょう。

これでとりあえずWordPressの設定は完了です。念のためWebサーバを再起動しておきます。

sudo service nginx reload

WordPressの確認

さてこの状態で自分のサイトにアクセスしてみましょう。

うまくいっていればWrodPressのセットアップ画面(ログイン画面ではなく)が表示されるはずです。

ここで必要な情報を入力して、最後に「WordPressをインストール」を選択してWordPressをセットアップします。

これでとりあえず空っぽのWordPressサイトができるはずです。次に投稿データなどを復活させるので、いったんWordPressの管理画面からログオフしておきます。

データベースの書き戻し

ここでようやく「wp_optionsテーブルを除去したデータベースのバックアップデータ」の出番です。

このデータをWordPressのデータベースに書き戻すことによって、投稿データやコメント・プラグインの設定などが復活します。

mysql -u root –p
mysql> source wp_optionsテーブルを除去したバックアップデータ;
mysql> exit;

これを実行した後に再びWordPressにログインしてみましょう。とりあえず投稿記事などは復活しているはずです。

まとめ

今回はバックアップしたWordPressのデータベースを復帰させる方法について紹介しました。

単にバックアップしたデータをインポートするだけ、という記事もよく見かけましたが、私の場合はwp_optionsテーブルは書き戻さない、という作戦で何とか復帰させることができました。

ただし、テーマの設定情報なwp_optionsテーブルに入ってた情報は失われてしまいます。これについては次回対策を紹介したいと思います。