【技術メモ】MySQL5.6でダンプを定期バッチで取得する
cronを利用してMySQLのダンプを取得する際の技術メモです。ダンプはバックアップとして保存しておきます
[ 目次 ]
はじめに
こんにちは、香港に住んでいるWEBデベロッパーのなかむ(@nakanakamu0828)です。
今回は、MySQLのバックアップとしてダンプを取得するバッチを作ったのでメモしていきます。
以前シェルを作成したのですが、そのサーバーが故障してシェルもなくなりました・・・
メモすること大事ですね。
それではシェルを作成していきます。
バックアップシェルを作成
前提としてバックアップは、rootユーザーで取得します。/root/backup_mysql.sh
というファイルを作成しcronで定期実行する形です。
【前提】
- rootユーザーでバックアップを実行
- MySQLのスキーマ毎にバックアップを取得する
-> スキーマ毎にダンプを取得することで、DBサーバーの移行をスキーマ単位でできるようにする為。 - --defaults-extra-file=${ROOT_DIR}/.my.cnf を利用して、MySQLへの認証を行う
#!/bin/sh
ROOT_DIR=/root
BACKUP_DIR=${ROOT_DIR}/backup
for schema in schema1 schema2
do
filepath="${BACKUP_DIR}/dump/${schema}/`date +'%Y%m%d%H'`.sql"
/usr/bin/mysqldump --defaults-extra-file=${ROOT_DIR}/.my.cnf --single-transaction --quick --set-charset ${schema} > ${filepath}
/bin/gzip ${filepath}
done
# 2日前のバックアップファイルは削除
/bin/find ${BACKUP_DIR} -mtime +2 -type f -exec rm -f {} \;
mysqldumpまとめ
↑
mysqldumpのオプションについては、こちらを参考にさせて頂きました。
crontabを設定
横着して /etc/crontab
にcronの設定を記述します。
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
00 0-23/3 * * * root /root/backup_mysql.sh > /dev/null 2>&1
3時間毎にバックアップを取るcloneです。
最後に
実際は別サーバーに転送したりしています。
AWSのS3にバックアップファイルをアップロードするのがいいのですが、利用できる環境を使って一旦バックアップを取得する方法でした。