LoginSignup
69
74

More than 5 years have passed since last update.

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

Posted at

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

69
74
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
69
74