MySQLでローテーションバックアップ

MySQLでバックアップデータをとって、古いデータを削除してローテーションさせる。

mysqldumpが可能なユーザーを作成する。

ユーザー名は[backup]、パスワードは[secret]、対象のデータベース名を[test]とする。

mysqlにrootでログインして、grantコマンドでユーザーを作る。

grant select, trigger, lock tables on *.* to backup@localhost;

作ったユーザーにパスワードを設定する。

set password for backup@localhost=password('secret');

一応確認

 select host, user from mysql.user;

一度MySQLコマンドからでて、mysqldumpコマンドを使ってみてtest.dmpがでればOK

mysqldump -u backup -psecret test > test.dmp;

スクリプトを作る

次に、ローテーションを行うためのスクリプトを作る。

vim mysql-bk.sh
#!/bin/bash

bkpath='/root/dbbk'

term=7

filename=`date +%Y%m%d`

mkdir -p $bkpath

mysqldump -u backup -psecret test > $bkpath/$filename.dmp

chmod 700 $bkpath/$filename.dmp

oldfile=`date --date "$term days ago" +%Y%m%d`
rm -f $dirpath/$oldfile.dmp

次に、パーミッションを作成者のみ実行権限があるように設定

chomod 700 mysql-bk.sh

試しに動かしてみる。

./mysql-bk.sh

任意のディレクトリにバックアップが取れていればOK。

cronにスクリプトを設定

作成者のcronに登録する。

crontab -e
0 4 * * * /root/mysql-bk.sh

毎日、午前4時に動くように設定。

別サーバーへ同期

あとは、うまくバックアップが取れていれば、別サーバーへrsync等で同期する。

rsyncとcronで定期的ににデータを同期する

 

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>