LoginSignup
1
0

More than 1 year has passed since last update.

EC2インスタンス内のMySQLをdumpしてS3に保存する

Posted at

概要

  • 対象
    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を編集します。

/etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1

log-binに任意の名前を設定し、server-idを指定します。

また、mysqldump実行時にパスワードを要求されることがありますが、cronで実行することを想定する場合、パスワードなしで実行できるようにしたいです。

そこで、ユーザーディレクトリ配下に.my.cnfを作成し、以下の設定を記述します。

~/.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をパスワード無しで使う方法

1
0
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
1
0