mysqldumpの結果を定期的にS3に保存する方法

mysqlで管理しているデータを、定期的にサーバー外にバックアップする方法を紹介します。 バックアップの保存先にAWSのS3に保存することにしました。S3ならコストも安く、過去数日間のファイルのみ残しておくなどライフサイクルの設定も簡単にできるので手軽にバックアップが取れておすすめです。

IAMユーザーの準備

まずは、バックアップファイルをS3に保存する際に使用するユーザーを作成しておきます。 今回はAWS CLIを使ってファイルを転送するので「プログラムによるアクセス」を選択しておきます。

IAMユーザーの作成方法

ポリシーのアタッチ

ポリシーはファイルアップロードができるようにAmazonS3FullAccessを選択しておきます。

ポリシーのアタッチ方法

シェルスクリプトの用意

mysqldumpコマンドでバックアップを取得し、取得したバックアップファイルをS3に転送する。

#!/bin/sh

BACKUP_FILENAME="dump_`date "+%Y%m%d_%H%M%S"`.sql"
mysqldump --defaults-extra-file=/root/bin/.my.db.cnf --single-transaction database_name --quick | /usr/local/bin/aws s3 cp - s3://backup/$BACKUP_FILENAME

logger "Saved the database dump file in s3 with the name $BACKUP_FILENAME."

exit 0

データベースの接続情報は別ファイルに記載しておく。

# cat /root/bin/.my.db.cnf
[client]
user=symm
password="データベースの接続パスワード"
host=127.0.0.1

cronの設定

起動はcronから。定期的にバックアップ処理を記載したシェルを実行する。

00 * * * * /root/bin/dump_.sh

シェルスクリプトでs3にファイル保存する際の注意点

シェルスプリプと内に記述するコマンドは、フルパスで記述する必要があります。 あるいは、crontab内でPATH環境変数を宣言しておけばいい。

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
* * * * * cronjob

スポンサーリンク