MySQLのバックアップがローカルマシンだけでは不安でしたので、S3にバックアップと取る事にしました。
もしかしてS3自体でできたかもしれませんが、なんちゃって世代管理も一緒にしています。
前提条件
- AWSコマンドラインインターフェイスが導入されている( http://aws.amazon.com/jp/cli/ )
スクリプト
backup.sh
#!/bin/bash
BACKUP_PATH="/your/backup/path/"
S3_PATH="s3://your-s3-bucket/"
FILE_NAME="mysql_dump_`date +%Y%m%d`.sql.gz"
AWS_CONFIG_FILE="/home/user/.aws/config"
cd $BACKUP_PATH
mysqldump -u mysql_user -p mysql_password --all-databases | gzip > $FILE_NAME
find $BACKUP_PATH -type f -name "mysql_dump_*.sql.gz" -mtime +9 -daystart | xargs rm -rf
aws s3 sync $BACKUP_PATH $S3_PATH --delete
細かい説明
- BACKUP_PATHに、mysqldumpでダンプしたデータがgzipで圧縮されて保存されます
- S3_PATHに指定したバケットやフォルダに、BACKUP_PATHの中身が同期されます
- FILE_NAMEはお好みで。スクリプトのままですと、「mysql_dump_20141128_sql.gz」みたいなファイルが出来上がります
- AWS_CONFIG_FILEには、aws configでアクセスキーやシークレットアクセスキーを設定すると保存される、設定情報へのパスを指定
- mysql_userとmysql_passwordにはバックアップで使用するMySQLのユーザー名とパスワードを指定。--all-databasesなので全部バックアップしますが、特定のデータベースのみという場合はお好みで変更してください
- ダンプしたデータはそのままgzipで圧縮されます
- findで、10日以上経過しているバックアップデータを削除しています。
削除不要な場合は行毎コメントアウト、日数を変えたい場合は-mtimeの後の+9の部分を変更してください。ファイル名を変更している場合は-name の後も変更を忘れずに - 最後に、S3に同期します。--deleteオプションは、削除されたファイルをS3から削除するオプションです
おわり
S3が思った以上に安かったので、バックアップとかは最適だと思いました。
早朝とかにcronで回しておきましょう。
参考
http://c-brains.jp/blog/wsg/12/03/28-120435.php
http://d.hatena.ne.jp/LukeSilvia/20100307/p1