MySQLでバックアップデータをとって、古いデータを削除してローテーションさせる。
mysqldumpが可能なユーザーを作成する。
ユーザー名は[backup]、パスワードは[secret]、対象のデータベース名を[test]とする。
mysqlにrootでログインして、grantコマンドでユーザーを作る。
1 |
grant select, trigger, lock tables on *.* to backup@localhost; |
作ったユーザーにパスワードを設定する。
1 |
set password for backup@localhost=password('secret'); |
一応確認
1 |
select host, user from mysql.user; |
一度MySQLコマンドからでて、mysqldumpコマンドを使ってみてtest.dmpがでればOK
1 |
mysqldump -u backup -psecret test > test.dmp; |
スクリプトを作る
次に、ローテーションを行うためのスクリプトを作る。
1 |
vim mysql-bk.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/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 |
次に、パーミッションを作成者のみ実行権限があるように設定
1 |
chomod 700 mysql-bk.sh |
試しに動かしてみる。
1 |
./mysql-bk.sh |
任意のディレクトリにバックアップが取れていればOK。
cronにスクリプトを設定
作成者のcronに登録する。
1 |
crontab -e |
1 |
0 4 * * * /root/mysql-bk.sh |
毎日、午前4時に動くように設定。
別サーバーへ同期
あとは、うまくバックアップが取れていれば、別サーバーへrsync等で同期する。