AWSCLIを利用してMySQLをS3へ定期バックアップする


1. AWSCLIのセットアップ

[bash gutter=”false”]
$ wget https://s3.amazonaws.com/aws-cli/awscli-bundle.zip
$ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
[/bash]

公式サイトの説明はこちら Getting Set Up with the AWS Command Line Interface – AWS Command Line Interface

インストールの確認

[bash gutter=”false”]
$ /usr/local/bin/aws –version
aws-cli/1.3.12 Python/2.6.6 Linux/2.6.32-279.5.1.el6.x86_64
[/bash]

AWSのアクセス情報などを設定

[bash gutter=”false”]
$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: ap-northeast-1
Default output format [None]: json
[/bash]

デフォルトのリージョンは東京を指定しています。

コマンドを実行して設定を確認

[bash gutter=”false”]
# aws s3 ls
2014-04-04 13:13:07 mysql-app-backup
2014-05-21 13:13:07 wp-backup
[/bash]

上記は、s3のバケット一覧を取得するコマンドです。

バックアップスクリプトを作成

以下は、cronに登録するシェルスクリプト。
mysqldumpで対象データベースのバックアップを作成し、S3バケットにsyncします。

[bash title=”backup.sh”]
#!/bin/sh

THEDB="DATABASE-NAME"
THEDBUSER="DATABASE-USER"
THEDBPW="DATABASE-USER-PASSWORD"
THEDATE=`date +%d%m%y%H%M`

mysqldump -u $THEDBUSER -p${THEDBPW} $THEDB | gzip > /var/www/_backups/dbbackup_${THEDB}_${THEDATE}.bak.gz

find /var/www/_backups/db* -mtime +5 -exec rm {} \;

/usr/local/bin/aws s3 sync /var/www/_backups s3://BUCKET-NAME –delete
[/bash]

Cronにシェルスクリプトを登録

[bash gutter=”false”]
$ crontab -e
[/bash]

[text gutter=”false”]
0 3 * * * /path/to/backup.sh > /dev/null 2>&1
[/text]

以上で完了です。

参考: Automating Backups to Amazon S3 | trepmal*

,