ALBデータベースのバックアップ

Post date: 2010/03/31 1:43:18

Backup your Database in Git | Vigetを参考にしました。gitは向いてないという意見もネットにはありますが、もっと良い方法が見付かるまではこの方法で行きたいとおもいます。

以下を参考に作成してください。

===============

バックアップの概要

===============

- ユーザ名anagixでcrontabにより実行します(20分おきに設定)

- ホーム直下のBKUPディレクトリのALB_DB以下に作成します

- alb_productionをmysqldumpし、差分をgitで管理します

- 別のマシーンにrsyncでコピーを作成します(オプション)

ディレクトリの作成

-----------------------------

この例では、~/BKUP/ALB_DBにバックアップを作っています

cd ~/BKUP/ALB_DBして、以下を実行してください。

git init

Crontabの設定

---------------------

00,20,40 * * * * /home/anagix/BKUP/ALB_DB/alb_db_bkup

05,25,45 * * * * rsync -e ssh -a BKUP/ 192.168.1.34:BKUP

10,30,50 * * * * (cd /home/anagix/BKUP; rsync -a /home/anagix/anagix_tools/alb/public/system/projects .) 2>&1 >/dev/null

15 * * * * (cd /home/anagix/BKUP/ALB_DB; git gc) 2>&1 >/dev/null

注意:

2行目はオプションです

sshでパスワードなしにrsyncするためには.sshの設定が必要なのでgoogleしてください。はまるポイントは.sshおよび以下のファイルのパーミッションをsecureに設定することです

3行目はprojectディレクトリのバックアップです。2>&1>/dev/nullはlog出力を出さないおまじないです

4行目で毎日1回git gcを実行します

alb_db_bkupの内容

----------------------------

#!/bin/sh

export PATH=/home/anagix/anagix_tools/bin:$PATH

cd /home/anagix/BKUP/ALB_DB/

mysqldump -u root --skip-extended-insert alb_production > production.mysql.sql

git add .; git commit -am "`date`"

注意: --skip-extended-insert を入れることで、各テーブルの項目がひとつひとつ

INSERTされるので、backupの際の差分が少なくなり、ディスク容量が節約できると
期待されます

==================

バックアップからの復旧

==================

cd ~/BKUP/ALB_DB

git log で、ログを表示します。変更前のcommitのハッシュ値(e288126a37674ee9aa5076a24dd4f7323a8858f4のような値)を見つけます。

git checkout e288126a37674ee9aa5076a24dd4f7323a8858f4 -b temp

で、ブランチを作ります。

production.mysql.sql が過去のものになりましたので、以下を実行します。

mysql -u root alb_production < production.mysql.sql

branchをmasterに戻し、不要になったブランチを消します。

git checkout master

git branch -d temp