WordPressのバックアップを自動で取得する。

Linux

このサイトはVPS上でdockerでwordpressを動かしているのですが、これまでバックアップなんて取っていなかったので、昨日のデータ領域整理に続いて、バックアップを設定してみました。

転ばぬ先のバックアップ、なんですが・・・保存先がまだ確定していません。実はGoogle Driveにプッシュしようと思ったんですが、いまいちしっくり来るソフトが見つからないという。DropBoxやAmazon S3が候補になるんですが、画像もあり意外に容量が大きいのでちょっと考え中。自宅に飛ばしておけばまずは安心なのかな。

というわけで、バックアップを設定しました。

まずは、バックアップ用のディスク領域をあえて別に作ります。

# lvcreate -L 64G -n lv_disk2 vg_disk1
# mkfs.ext4 -i 65536 -j -m 0 /dev/mapper/vg_disk1-lv_disk2
# tune2fs -i 0 -c 0 /dev/mapper/vg_disk1-lv_disk2
# mkdir /disk2
# printf "UUID="`tune2fs -l /dev/mapper/vg_disk1-lv_disk2 |grep UUID | sed -e '~s/Filesystem UUID: *//;'`\
"\t/disk2\text4\trw,noatime\t1 2\n" >> /etc/fstab
# mount /disk2

これで/disk2ができました。これを/share/docker1当たりのフォルダ名でdockerとは共有したいので、bindマウントをかけます。

# mkdir -p /disk2/share/docker1/backup
# mkdir /share
# echo /disk2/share /share none bind 0 0 >> /etc/fstab
# mount /share

これで/share/docker1/backupができました。

# df -a
Filesystem           1K-blocks     Used Available Use% Mounted on
...
/dev/mapper/vg_disk1-lv_disk2
                      66711292    53076  66658216   1% /disk2
/disk2/share          66711292    53076  66658216   1% /share

次はdocker内部の作業。まずは共有ディレクトリを作っておきます。

# mkdir /share

外に戻って、共有設定付きでdockerを起動しなおします。ついでに、commitもかけて、ディスク領域を整理します。

# docker stop UUID
# docker commit UUID centos/wp:20150706
# docker rm UUID
# docker run -d -p 80:80 -v /share/docker1:/share centos/wp:20150706 /etc/monit.start

monitを使っているのでこんなコマンドラインになっていますが、要するに、-vオプションがポイントで、ホスト側の/share/docker1をdocker内では/shareとして扱えます。

この状態で、docker内からファイルを置いて、ホスト側で見えることを確認できれば、まずはファイル取り出し環境はできたと。

続いて、バックアップ処理を書きます。

WordPressのバックアップの方法としては、プラグインを使う方法が一般的というか流行りですが、個人的にプラグインをセットアップするまでの環境とか、その他のパラメータもなるべく維持したいため、ツリーそのままのバックアップを取ることにしました。容量の大半がイメージファイルなので、全体のバックアップを取っても容量の差はそんなに無いですし。マジ、イメージのバックアップを何か考えないといけないなぁと思いました。

# cat > /usr/local/bin/backup-wordpress.sh <<END
#!/bin/sh

/usr/bin/mysqldump -uroot -pmyrootpass wordpress | gzip > /share/backup/mysql-wordpress-dump-`date +%Y%m%d%H%M%S`.gz
/bin/tar --directory=/var/www/html -jcf /share/backup/wordpress-backup-`date +%Y%m%d%H%M%S`.tar.bz wordpress
END

# cat /etc/crontab
58 5 * * * root /usr/local/bin/backup-wordpress.sh &> /dev/null

一度手動実行してみた感じですが、イメージファイルがやっぱり厄介です。既にoptipng等の画像圧縮プラグインで圧縮されたイメージファイルばかりなので、結局tarでの圧縮は殆ど効きません。時間ばかりかかっている印象です。じゃぁ圧縮無しのtarで良いかというと、それ以外のファイルもあるので、圧縮はかけたいところで・・・ちょっと考えないといけないかなぁという感じ。

ただ、これで自動でVPS側にバックアップが取り出せるようになったので、何かおかしくなっても環境再現できる状態にはなりました。まずは良かった。あとはこれを外部ストレージサービスにプッシュしたいところなんですが・・・意外に容量が大きいので困ってます。どうしよう。

コメント

タイトルとURLをコピーしました