ShellScript
MySQL
AWS

MySQLを毎日バックアップして、S3に同期するシェルスクリプト

More than 3 years have passed since last update.

MySQLのバックアップがローカルマシンだけでは不安でしたので、S3にバックアップと取る事にしました。

もしかしてS3自体でできたかもしれませんが、なんちゃって世代管理も一緒にしています。


前提条件


スクリプト


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