S3にデータをバックアップ (s3sync)
さくらVPSサーバからAmazon S3へのバックアップ方法をまとめました。
現時点(2011-02)のAmazon S3の価格は以下の通りです。今回はシンガポールにバケットを作ってみようと思います。価格は低冗長化ストレージだと、$0.093/GB! 安いですねぇ。
では早速バックアップしてみましょう。今回の環境は以下の通り:
- サーバ
- Ubuntu 10.04.1 LTS on さくらVPS
- Ruby
- ruby 1.8.7 (2010-04-19 patchlevel 253) [i686-linux], MBARI 0x8770, Ruby Enterprise Edition 2010.02
1. 保存先のバケットを作成する
AWS Management Console > S3タブを選択し、「Create Bucket」をクリック。
バケット名とリージョンを入力し、「Create」をクリックすると、中身が空のバケットができました。
2. s3syncの設定
バックアップ元サーバでの作業です。s3syncをダウンロードします。
$ wget http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz--2011-02-08 10:24:32-- http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz
Resolving s3.amazonaws.com... 207.171.189.80
Connecting to s3.amazonaws.com|207.171.189.80|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 30415 (30K) []
Saving to: `s3sync.tar.gz'
100%[==================================================================================================================================================================================================>] 30,415 65.3K/s in 0.5s
2011-02-08 10:24:33 (65.3 KB/s) - `s3sync.tar.gz' saved [30415/30415]
展開して、/usr/local/以下にコピーします。
$ tar zxvf s3sync.tar.gz
$ sudo cp -pr s3sync/ /usr/local/
設定ファイルを作成します。
$ sudo mkdir /etc/s3conf
$ sudo cp /usr/local/s3sync/s3config.yml.example /etc/s3conf/s3config.yml
$ sudo vi /etc/s3conf/s3config.yml
以下の内容で保存します。
aws_access_key_id: [適当に変えてください]
aws_secret_access_key: [適当に変えてください]
これで設定完了です。コマンドが動くか確認しましょう。
$ ruby /usr/local/s3sync/s3cmd.rb listbuckets
risin-jp
先ほど作成したバケット名が表示されたらOKです。
3. バックアップ対象を作成する
サーバ側で何をバックアップするかを決定します。今回は本ブログのWordpressディレクトリと、MySQLデータと、Subversionリポジトリをバックアップ対象とします。
S3と同期するディレクトリを作成しておきます。
$ sudo mkdir /var/backup
$ sudo chown -R masayuki:masayuki /var/backup
今回は1日1回cronにてバックアップするので、そのスクリプトを作成します。
$ vi cron/s3backup.sh
--
#!/bin/sh
# TODAY
day=`date '+%d'`
# Wordpress
tar zcvf /var/backup/wordpress.$day.tar.gz [wordpressのディレクトリ]
# MySQL
mysqldump -u[適当に] -p[適当に] --all-databases | gzip > /var/backup/mysqldump.$day.gz
# Subversion
svnadmin hotcopy [バックアップ対象リポジトリパス] /var/backup/svnrepo_hoge
tar zcvf /var/backup/svnrepo_hoge.$day.tar.gz /var/backup/svnrepo_hoge
rm -rf /var/backup/svnrepo_hoge
# Sync to S3
ruby /usr/local/s3sync/s3sync.rb -r --delete /var/backup [バケット名]:
--
バックアップ対象ファイル名に日付を入れることで最大31世代分保持するものとします。
4. 実行
$ cron/s3backup.sh
4-1. /var/backupに出力されているか確認
きちんと保存されていなければ、先程のシェルスクリプト内のコマンドを一つ一つ確認しましょう。
4-2. S3に同期されたか確認
AWS Management Consoleにて確認します。同期されてますね!
5. 低冗長化ストレージにする
バケット単位ではなく、ディレクトリ単位で行うようです。 Management Consoleで、先程のbackupディレクトリを選択肢、「Properties」をクリックし、「Use Reduced Redundancy Storage」にチェック。
これで作業完了です。