概要
- 対象
EC2にMySQLを配置しており、バックアップを定期的に実行したい人 - ざっくりとした流れ
MySQLのdumpファイルを作成し、S3に保存するシェルを作成
cronで上記のシェルを定期実行する
mysqldumpを実行するシェルスクリプト作成
※AWS CLIを利用するためのcredentialsは登録済みと仮定します。
#!/bin/sh
# dumpの実行結果を保存するファイルパスを指定
filename=~/test.sql
database=[DBの名前]
mysqldump -u root --quote-names --skip-lock-tables --single-transaction --flush-logs --master-data=2 $database > $filename
aws s3 cp $filename s3://[backet_name]
# s3にアップロードした後、ローカルからdumpファイル削除
rm $filename
試しにこのシェルを実行しようとしたところ、
mysqldump: Error: Binlogging on server not active
といったエラーが発生し、うまく動かないということがあるかと思います。
その時は/etc/my.cnfを編集します。
[mysqld]
log-bin=mysql-bin
server-id=1
log-bin
に任意の名前を設定し、server-idを指定します。
また、mysqldump実行時にパスワードを要求されることがありますが、cronで実行することを想定する場合、パスワードなしで実行できるようにしたいです。
そこで、ユーザーディレクトリ配下に.my.cnfを作成し、以下の設定を記述します。
[mysqldump]
user='username'
password='password'
これで任意のユーザー名・パスワードを指定してあげれば、mysqldumpコマンドをユーザー指定・パスワード入力を求められずに実行できます。
定期実行
crontab -e
を実行し、以下設定を追加
00 9 * * 1-5 [dumpを実行するシェルのパス]
cronの実行時刻は各自好きなように設定してください!
EC2ではデフォルトでタイムゾーンがUTCとなっているので、月曜から金曜の日本時間18時に実行したい場合は以上のように記述します。
参考
【MySQL】EC2インスタンスなどからデータをdumpする
MySQLのバイナリログとレプリケーションとserver-idの関係
mysqldumpをパスワード無しで使う方法