目的
Linuxサーバで動かしているシステムのDB(MySQL)をバックアップして、別のサーバで管理したい。
背景
最近システムのMySQLのDBバックアップができていないことがわかったので、バックアップして別のサーバで保管したいと考えました。
準備
今回は、別のサーバ側にマウントしてマウント先に直接バックアップを行います。そのため、事前にDBがあるサーバ側にマウントポイント(ディレクトリ)を作成する必要があります。今回は /bk がマウントポイントにあたります。
コード
#!/bin/sh
# DBのバックアップを置くサーバをマウント
mount -t nfs XXX.XXX.XXX.XXX:/mnt/XXXXX /bk
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t nfs_mount "ALERT Failed NFS_MOUNT"
fi
# バックアップ先にバックアップ
# XXXXがDBのユーザ名、YYYYYYYYがパスワード、db_nameがDB名
mysqldump -uXXXX -pYYYYYYYY --single-transaction db_name |gzip > /bk/mysqldump_`date +"%Y%m%d"`.sql.gz
# 3週間前のDBは削除
find /bk/ -mtime +21 -exec rm -f {} \;
# バックアップ失敗時にはメール通知
# aaaaaa@hogehoge.hogeは送信元のアドレス
# bbbbbbb@hogehoge.hogeは送信先のアドレス
if [ $EXITVALUE != 0 ]; then
echo "DBのバックアップに失敗しました。" | mail -s "mysqldumpによるバックアップ失敗" -r aaaaaa@hogehoge.hoge bbbbbbb@hogehoge.hoge
fi
# マウント解除
umount /bk
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t nfs_unmount "ALERT Failed NFS_UNMOUNT"
補足
あとはこれをcronで仕込めば自動で勝手バックアップしてくれます。
なお、マウントの失敗及びバックアップの失敗時にはメールを飛ばすように設定しています。また、世代管理として、3週間前のDBは自動で削除するコマンドも仕込んでいます。
↧