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