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

2010/03/30 18:43 に 森山誠二郎 が投稿   [ 2013/04/15 22:35 に更新しました ]

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

Comments