WebARENA CLOUD9にCLIのDropboxをインストールしてmysqlをバックアップ

2011年2月18日

WebARENA CLOUD9、解約しようとしたら、3ヶ月無料キャンペーンは、1年契約になるので3ヶ月経過後すぐには解約出来なかった。がーん。
仕方が無いので、あんまり落ちてくれるなよと祈りつつ色々実験機として使うことにした。

クラウドストレージの登場で、外部バックアップがしやすくなった

バックアップデータは曜日単位でバックアップを取るなどすると掛け算で容量が増えるのでストレージを結構圧迫する。また、同一ストレージ上にあるよりは、別ストレージに逃がした方が当然良い。
Dropboxなどクラウドストレージは、上記要件の解として有効なもののひとつだと思う。問題点は、ストレージの速度とセキュリティの問題か。プライベートクラウドなど、今後はより安全で安定なサービスも増えると思うが、今回はwordpressの記事データをバックアップするという単純な用途なので、あまり難しく考えずDropboxにmysqlのダンプを退避してみる。

参考サイト

http://wiki.dropbox.com/TipsAndTricks/TextBasedLinuxInstallを参考にした。
日本語で個人の方が書いている方法もあったが、その当時よりも対応が進んでいて、より簡単に出来た。この記事だって数ヶ月もしたら、もっと簡単な方法に置き換わると思われる。

Pythonのインストール

CentOSにデフォルトでインストールされているPythonは、2.4.3。DropboxのCLIは2.5以上を要求しているので、現時点で2.X系で最新の2.7.1をインストールした。
その際、すでにインストールされているPythonとぶつからないようにした。

#wget http://www.python.org/ftp/python/2.7.1/Python-2.7.1.tgz
#tar -zxvf Python-2.7.1.tgz
#cd Python-2.7.1
#./configure --prefix=/usr/local/bin/Python-2.7.1
#make
#make install
#ln -s /usr/local/bin/Python-2.7.1/bin/python /usr/bin/python2.7.1
#python2.7.1 -V
Python 2.7.1

Dropboxのインストール

dropbox.pyからDropbox本体をインストール出来るので、dropbox.pyを先にダウンロードする。

#wget -O dropbox.py "http://www.dropbox.com/download?dl=packages/dropbox.py"
#python2.7.1 ./dropbox.py start -i
Starting Dropbox...
Dropbox is the easiest way to share and store your files online. Want to learn more? Head to http://www.dropbox.com/

In order to use Dropbox, you must download the proprietary daemon. [y/n] y
Downloading Dropbox... 100%
Unpacking Dropbox... 100%
Done!
#python2.7.1 ./dropbox.py start
To link this computer to a dropbox account, visit the following url:
https://www.dropbox.com/cli_link?host_id=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

表示されたURLにブラウザからアクセスし、すでに持っているアカウントでログインすると同期完了。ホームディレクトリ上にDropboxディレクトリが作成され、同期が開始される。これで設定は終わり。Dropboxは動いている。

シェルでmysqldumpを実行して、Dropboxで同期する

Dropboxを常時デーモンとして動かしても良いのだけど、見たところ200MBくらいメモリを使う。CLOUD9の基本プランではメモリは1GBなので、出来るだけメモリは節約したい。バックアップ目的なので、バックアップ処理時だけDropboxを起動して、処理終了時にはDropboxも終了するようにする。
以下のようなシェルスクリプトで定期実行する。

#!/bin/bash
prog="python2.7.1 Dropboxをインストールしたディレクトリ/dropbox.py"

mysqldump --user=root --all-databases --password=パスワード > ホームディレクトリ/Dropbox/mysqldump/dump
tar czvf ホームディレクトリ/Dropbox/mysqldump/dump`date '+%w'`.tgz ホームディレクトリ/Dropbox/mysqldump/dump
rm -rf ホームディレクトリ/Dropbox/mysqldump/dump
$prog start
status=`$prog status`
while [ "$status" != "Idle" ]
do
status=`$prog status`
echo $status
sleep 3 ← Dropboxの状態を次に確認するまでの秒数
done
$prog stop

mysqldumpのパラメータは、使うデータベースを限定したり、状況に合わせて変更する。稼働中、Dropboxのステータスを表示するようにしたので、どのくらいの時間で同期できたかもざっくりわかる仕組み。
データセンターからのアップなので結構なスピードが出るのかと思ったら100KB/sec以下になることも多い。これはこちらの回線というよりもDropbox側の問題だと思われる。

と、ここでCLOUD9は回線速度のことを書いていないことに気づいた。SuitePROは1Gbpsと書いている。なんというか、全体にこんな印象なんだよね、CLOUD9。説明があるようで無いようである。探せばどこかに書いてあるのだろう。