渡米生活。(日記)

渡米生活。本家から切り離しました。あまり渡米生活に関係のないプログラムネタや音楽ネタなど。

WP-DBManager + MAMPでサイトのフルバックアップをとる方法

2014/1/23追記
最近は、サイトのファイル(wp-content直下)までバックアップしてくれるソフトとして、BackWPupというプラグインがあるらしい。しかも、バックアップファイルをDropBoxなど別のファイルサーバにも送ってくれるというスグレモノ。
BackWPUpは動かない率かなり高いです。なので、UpdraftPlus Backup/Restoreをおすすめします。
これは最初のセットアップさえ頑張ればかなり使いやすいです。
wp-content以下も保存してくれるし、DropBoxGoogle Drive等にも自動保存できます。
詳細は「Wordpressの便利なバックアップ/リストアプラグイン - UpdraftPlus」をご覧下さい。

サイトにwpの機能を使って写真などを頻繁にアップロードする人は、こういったプラグインの使用をおすすめします。

サイトのフルバックアップはなかなか頭の痛い問題。
昔はhtmlだけだったから、単に全てのファイルをとってくれば済む話だったけれど、wordpressにしてから当然データベースのバックアップもとらないといけないわけで。

勿論、wordpressには、そのデータベースのバックアップをやってくれるプラグインがいくつかあります。
WP-DBManagerはデータベースファイルをメールで送ったりもしてくれるので、なかなか使い勝手が良いのだけど、ではこれをどうやって復元するの? と思ったときに、はたと困ってしまった。

ネットで検索すると、どこでも「新しいWPをインストールして…」という一文に突き当たります。これが嬉しくない。
理由は、山ほど入れているプラグインをまたダウンロードしてくるのが面倒臭い、というのもあるけど、もっと切実なのは、いつでも一番最新のWPやプラグインを使っているとは限らないからです。

まあ、wp本体はマイナーチェンジくらいでテーブルの構造が変わったりはしない、と信じたいけれど、サードパーティプラグインあたりはバージョンが新しくなった時に新しくフィールドを足したり、といったことがあるかも知れない。
そうなると、いざサイトのファイルがぶっ壊れたときに、ぶっ壊れる直前のWP及びプラグインの、まったく同じバージョンのセットを作るのは大変だ、というのは容易に想像がつきます。

なので、できれば、定期的にWPフォルダごとバックアップして、一方でデータベースもWP-DBManagerで定期的にバックアップして、いざ事が起こったら、

1)データベースを完全消去
2)バックアップしたWPフォルダをコピー
3)WP-DBManagerのバックアップファイルを食わせて完全復帰!

という形にしたいわけです。
これができれば、現在使っているサーバが重くなったので、サーバを引っ越したい、というときにも簡単です。

で、こんな実験を今稼働しているサイトでやるのは危険すぎるので、とりあえずローカルでやってみよう、とMAMP環境の中でやってみたまとめ。
私がMacを使っているので、MacOSXを仮定していますが、基本的にはWindows + XMAMPでも同じはずです。

※ターミナルを使ってコマンド入力しますので、UNIXコマンドに慣れていない方にはちょっと敷居が高い方法かも。

MAMPのインストール

…は、よそさまのサイトでも沢山説明されているのでスキップ。
インストールができたら、/Applications/MAMP/htdocsの下に、サーバーからコピーしてきたwordpressフォルダを置きます。(私の場合このフォルダ名がwpとなっています)

MAMPのインストールの説明では、このあとwordpressをインストールして、wordpressからデータベースを作成する方法が書かれていることが多いですが、ここではデータベースへの接続は別の方法でやるので、その部分はスキップして下さい。

ユーザとデータベース作成

MAMPをインストールすると、デフォルトでmysqlにrootユーザが追加されます。でも、サーバー上でrootユーザで運営することなんてあるわけがないので、サーバー上で使っているデータベースのユーザ名とパスワードで新ユーザを作成します。

まずは、MAMPを起動しておいて、データベースにrootでログイン。
全てコマンドラインでやりますので、ターミナルを使います。
(ターミナルはアプリケーション/ユーティリティの中にあります。これをダブルクリックして起動します。)
ちなみに、mysqlコマンドは、MAMPの場合、/Applications/MAMP/Library/bin/mysql にあります。
MAMPのデフォルトrootパスワードはrootです。

以下、$記号はターミナル(デフォルトではbash)のプロンプト記号、mysql>はmysqlを起動した後のプロンプト記号です。
shellに詳しくない方は、行の最後でリターンキーを押すのを忘れずに。

$ /Applications/MAMP/Library/bin/mysql -u root -p

このあと、パスワードをきかれるので、rootと入れてリターン。

それから、以下のコマンドを打つ。

mysql> CREATE DATABASE データベース名;
mysql> GRANT ALL ON データベース名.* to ユーザ名@localhost;
mysql> FLUSH PRIVILEGES;
mysql> SET PASSWORD FOR ユーザ名@localhost=password('パスワード');

文末の;も忘れずに打って下さい。
ここで必要な情報は全て、コピーしたwpフォルダの中の、wp-config.phpに書いてあります。

define('DB_NAME', 'test1');    // データベース名
define('DB_USER', 'test1');     // ユーザー名
define('DB_PASSWORD', '12345678'); // パスワード

こんな感じ。

ところで、CREATE DATABASEで失敗することがあります。つまり、既にその名前のデータベースが存在している場合です。
その際は、作成するデータベースの名前を変えるか、必要なければ古いデータベースを以下のコマンドで消します。
ここでは、test1という名前のデータベースを、DROP DATABASEコマンドで削除します。

mysql> SHOW DATABASES; 
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test1              |
| test2              |
| test3              |
| mysql              |
| performance_schema |
+--------------------+
6 rows in set (0.03 sec)

mysql> DROP DATABASE test1;
Query OK, 35 rows affected (6.11 sec)

mysql>  SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test2              |
| test3              |
| mysql              |
| performance_schema |
+--------------------+
5 rows in set (0.03 sec)

こんな感じ。

テーブルが作れたら、一度mysqlを抜けます。

mysql> quit
Bye

ここまでできたら、一気にDBにバックアップを流し込みます。WP-DBManagerでバックアップしたファイルを、仮にここではバックアップ.sqlとします。

$ /Applications/MAMP/Library/bin/mysql -u ユーザ名 -p データベース名 < バックアップ.sql 

パスワードは、さっき指定したユーザ名のパスワードを入れて下さい。
できたら、早速接続確認!
ユーザ名とデータベース名は適宜変更。

$ /Applications/MAMP/Library/bin/mysql -u ユーザ名 -p
mysql> USE データベース名
Database changed
mysql> SHOW TABLES;
+-------------------------------+
| Tables_in_test1               |
+-------------------------------+
| wp_automaticSEOlinks          |
| wp_automaticSEOlinksStats     |
| wp_blc_filters                |
| wp_blc_instances              |
| wp_blc_links                  |
| wp_blc_synch                  |
| wp_commentmeta                |
| wp_comments                   |
| wp_icl_cms_nav_cache          |
| wp_icl_content_status         |
| wp_icl_core_status            |
| wp_icl_flags                  |
| wp_icl_languages              |
| wp_icl_languages_translations |
| wp_icl_locale_map             |
| wp_icl_message_status         |
| wp_icl_node                   |
| wp_icl_reminders              |
| wp_icl_string_positions       |
| wp_icl_string_status          |
| wp_icl_string_translations    |
| wp_icl_strings                |
| wp_icl_translate              |
| wp_icl_translate_job          |
| wp_icl_translation_status     |
| wp_icl_translations           |
| wp_links                      |
| wp_options                    |
| wp_postmeta                   |
| wp_posts                      |
| wp_term_relationships         |
| wp_term_taxonomy              |
| wp_terms                      |
| wp_usermeta                   |
| wp_users                      |
+-------------------------------+
35 rows in set (0.00 sec)

こんな感じで見えれば成功ではないでしょうか。

既存のwordpressへの接続

さて、ここまで済んだら、ローカルにコピーしてきたwordpressフォルダの中のwp-config.phpに1カ所だけ変更を加えます。
これをやらないと、ログインしようとしてもサーバ上のファイルにとんでしまいます。

/* wp-config.phpに以下の行を追加 */

define('WP_SITEURL', 'http://localhost:8888/wp');

ちなみに、私のwordpressフォルダ名がwpなので、パスの最後がwpで終わっていますが、そこはご自身の環境に合わせて下さい。

これができたら、以下のアドレスにブラウザから接続します。

http://localhost:8888/wp/wp-admin/
(/wp/の部分は自分の環境に合わせる)

ユーザー名、パスワードとも、サーバで使っているもので接続できるはずです。

ログインしたら、設定→一般タブから、サイトアドレス(URL)を確認。
もとからここを弄っていない人は変更の必要はありませんが、ここをカスタマイズしている人は、ローカルの環境にあわせて書き直します。


これで、ローカルに完全なサイトのコピー作成完了!

ローカルでここまでやれれば、サイトのファイルがぶっとんだ時に、逆にローカルからサイトサーバへのコピーが簡単に作れます。

……といっても、使っているホスティングサーバがシェルによるログインをサポートしていて、内部でmysqlコマンドを使わせてくれることが前提条件ですが……(汗)。

この条件が満たされないサーバでは、もしかしたらmysqladminかなにかでmysqlの実行権限はもらえることもあるかもしれないので、それで頑張ってみて下さい。

ダメなら……やっぱりwordpressの新規インストールで頑張るしかないかな?(^^;)