0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MySQLのDBを別のサーバに定期バックアップする

Posted at

背景

最近監視システムのMySQLのDBバックアップができていないことがわかったので、ちゃんとバックアップして別のサーバで保管したいと考えました。

準備

今回は、別のサーバ側にマウントしてマウント先に直接バックアップを行います。

そのため、事前にDBがあるサーバ側にマウントポイント(ディレクトリ)を作成する必要があります。今回は/bkがマウントポイントにあたります。

コード

#!/bin/sh

# DBのバックアップ先のサーバ(XXX.XXX.XXX.XXX)をマウント
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"
    exit $EXITVALUE
fi

# バックアップ処理を走らせる
# XXXXがDBのユーザ名、YYYYYYYYがパスワード、db_nameがDB名
mysqldump -uXXXX -pYYYYYYYY --single-transaction db_name | gzip > /bk/mysqldump_`date +"%Y%m%d"`.sql.gz

# バックアップ失敗したらメールで通知を飛ばす
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    echo "DBのバックアップに失敗しました。" | mail -s "mysqldumpによるバックアップ失敗" -r aaaaaa@hogehoge.hoge bbbbbbb@hogehoge.hoge
    exit $EXITVALUE
fi

# 3週間前のDBは削除
find /bk/ -mtime +21 -exec rm -f {} \;

# マウント解除
umount /bk

# アンマウント失敗したらメールで通知を飛ばす
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t nfs_unmount "ALERT Failed NFS_UNMOUNT"
    exit $EXITVALUE
fi

補足

あとはこれをcronで仕込めば自動で勝手バックアップしてくれます。

なお、バックアップ及びアンマウント失敗時にはメールを飛ばすように設定しています。また、世代管理として、3週間前のDBは自動で削除するコマンドも仕込んでいます。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?