WordPressの復活 その3: テーマ・プラグイン設定の復活

修理

前回はWordPressの各種データを書き戻すことによってWordPressサイトを復活させました。しかし、その手順でWordPressデータベースのwp_optionsというテーブルを除去したので、テーマやプラグインの設定が失われしまいました。

設定項目が少ないテーマを使っている方や、利用しているプラグインが少ない人の場合には、記憶を頼りに再設定すればこれでも問題ありませんが、そうでない方にはちょっと面倒です。

私はかなり強引な手法でテーマとプラグインの設定を復帰させたので、今回はそれを紹介しておきます。もっとスマートな方法があるとは思いますが、MySQLの知識がないこともあってほかに思いつきませんでした。面倒ですしあまり真似をしない方がよいかもしれません。

phpMyAdminの有効化

今回はデータベースの中身をいじるのでphpmyadminというツールをインストールして使えるようにしておきます。

インストールは次のコマンドを実行するだけです。

sudo apt-get install phpmyadmin

次にnginx用の設定ファイルを作ります。/etc/nginx/sites-availableに次の内容のファイルをphpmyadminという名前で作成します。

15~16行目のSSLの証明書の作り方はこちらを、18~20行目のBasic認証の設定はこちらを参照してください。

server {
listen 443;
server_name ホスト名;

# コンテンツがあるローカルのトップディレクトリの設定
root /usr/share/phpmyadmin;
index index.php;

# ログファイルの設定 エラーは警告レベル以上を記録
error_log /var/log/nginx/phpmyadmin-error.log warn;
access_log /var/log/nginx/phpmyadmin-access.log combined;

# SSLを有効にする
ssl on;
ssl_certificate     /etc/ssl/certs/scratchpad.jp.crt;
ssl_certificate_key /etc/ssl/private/scratchpad.jp.key;

# 安全のためBasic認証
auth_basic      "phpmyadmin Login";
auth_basic_user_file "/etc/nginx/.htpasswd";

location ~ \.php$ {
try_files $uri =404;

fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_connect_timeout 300;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;
fastcgi_param  REDIRECT_STATUS    200;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass php_backend;
fastcgi_ignore_client_abort on;
}
}

3行目のホスト名のところはご自分のドメインのURLを適当に指定してください(phpmyadmin.example.comとか)。

最後にこの設定ファイルへのシンボリックリンクを/etc/nginx/sites-enableに作成してnginxに設定を再読み込みさえます。

sudo ln -s /etc/nginx/sites-available/myphpadmin /etc/nginx/sites-enabled/
sudo service nginx reload

wp_optionsテーブルの用意

次にバックアップしておいたWordPressのデータベースのwp_optionsテーブルを読み出せるようにします。

一時的なデータベースを作成して、そこにwp_optionsテーブルをインポートすればよいのだと思うのですが、よくわからなかったので、

  1. 一時的なデータベースを作成する
  2. 作成したデータベースにバックアップしておいたWordPressのデータベースをインポートする

という手段を取りました。

一時的なデータベースの作成

これは簡単です。rootでMySQLに入りCREATEコマンドで作成します。以下の例ではtempというデータベースを作成しています。

mysql -u root -p
mysql> CREATE temp;
mysql> exit;

バックアップデータのインポート

これはちょっと困りました。普通にインポートしてしまうと、一時的に作成したデータベースではなく、元のデータベース名のほうにインポートしてしまうのです。

そこで丸ごとバックアップしておいた/var/lib/mysql以下のファイルのうち、WordPressで使っていたデータベース名のディレクトリの中身を丸ごとコピーすることにしました。

sudo service mysql stop
sudo cp -a バックアップしたWordPressデータベースのディレクトリ/* /var/lib/mysql/temp/
sudo service mysql start

次のように作成したデータベースに接続してテーブル一覧が表示されれば成功です。

mysql -u root temp -p
mysql> SHOW TABLES;

phpMyAdminを使ったデータの復帰

それではphpMyAdminに接続してみます。

「https://設定したホスト名」でアクセスすると次のような画面が表示されるはずです。

phpMyAdminのログイン画面

ユーザ名に「root」、パスワードにMySQLのrootのパスワードを入れてログインします。

ログインに成功したらブラウザをもうひとつ開いて同様にログインします。

そしてphpMyAdminの画面の左側のデータベースから「WordPressに使っているデータベース」と「一時的なデータベース(temp)」をそれぞれのブラウザで開いて見比べられるようにします。

画面の左側にはテーブル一覧が表示されますので両方の「wp_options」を選択します。

これでバックアップ時のwp_optionsの中身と現在のwp_optionsの中身が比較できるようになります。あとはこれを比較して値をコピーしていきます。

値(option_value)のコピー

同じ項目(option_name)が両者に存在して値(option_value)が異なる場合は、単に値を上書きコピーすればOKです。

たとえばblogdescriptionの値をコピーする場合は、「一時的なデータベース(temp)」の画面のblogdescriptionの「編集」選択します。

blogdescription

するとこのオプションの値が表示されますので、すべてのテキストをコピーしておきます。

値(option_value)のコピー

そして現在WordPressが使っているデータベースのphpMyAdmin画面で同様にblogdescriptionの「編集」を選択して、option_valueのところにコピーしたテキストをペーストしたのち「実行ボタン」を押します。

これでバックアップ時の設定値がコピーされ、現在のWordPressでも使えるようになります。

項目(option_name)の挿入

項目(option_name)がバックアップ時のwp_optionsにしか存在しない場合も結構あります(ほとんどがこのパターンです)。

この場合は現在WordPressで使っているデータベースに同じ名前の項目を挿入(追加)しなければいけません。

まずは「値(option_value)」の時と同様に、コピーしたい項目を編集で開き、すぐにコピーできるようにしておきます。

続いて現在のWordPressで使っているデータベースを開いているphpMyAdminのウィンドウで、画面上部のメニューで「挿入」を選びます。

phpMyAdminのメニュー

するとoption_nameとoption_valueを入力する画面になりますので、「一時的なデータベース(バックアップ時のwp_options)」から両者をコピーします。それ以外の欄は空欄のままで問題ありません。

項目の挿入

コピーが完了したら「実行」を押します。

繰り返し

この値(option_value)のコピー、あるいは、項目(option_name)を繰り返すすことになりますが、その量も結構ばかになりません。

設定が思い出せないプラグインやテーマのみピンポイントで復旧していく方がよいと思います。

option_nameからどのプラグインの設定項目なのか大体予想をつけることができます。phpMyAdminの画面のキーでソートを「option_name(昇順)」とするとわかりやすいでしょう。

たとえば「All In One SEO Packプラグイン」ならば「aioseop_options」がその設定項目です。

まとめ

今回はphpMyAdminを使って無理やりWordPressの設定を復帰させる方法を紹介しました。

きっともっと良い方法があるのだと思いますが、調べる時間もなくこの力技で乗り切りました。同じような人がいるかどうかわかりませんが、せっかくなのでブログに残しておきます。

これでWordPressが復活したので、次回はWordPressの高速化について紹介したいと思います。