【svn】バックアップをとりましょうの巻
(ΦωΦ)にゃ♪
今日はネコの日だって(ΦωΦ)
さてさて。svnのお話。
最近、とあるsvnを引き取ってくれといわれたので、引き取ったら、
バックアップが1年以上動いていなかった.....orz
てか、ディレクトリ毎まんまrsyncsしようとしてたらしく、それがこけてたよ|ωΦ)
svnにはsvnsyncという便利なコマンドがあります。
svnのミラーを作る感じ。
仮に本体が使えなくなっても、ミラーをとっておくとそっからデータを参照できたり、
最終的には本体に昇格させることも可能です
移行のときにも使えるよ(ΦωΦ)♪
前提
今回は、svnの本体はすでに存在してまふ。
svnのバージョンはこんな感じ。古め
$svn --version svn, version 1.6.11 (r934486)
仮に、バックアップを取りたいリポジトリの名前をnekoとして
手順を説明していきます
バックアップ先のサーバさんの準備
バックアップ先のサーバさんにリポを作る
$cd /var/svn/repos
$/usr/bin/svnadmin create neko
pre-revprop-changeを作る
svnsynvはフックの仕組みで動くので、リビジョンの変更可能にするために設定をいれます
cd neko/hooks
vim pre-revprop-change
pre-revprop-changeの中身はこれだけでOK。
#!/bin/bash exit 0
フックスクリプトに実行権限を付与
$chmod +x pre-revprop-change
本体svnのuuidとバックアップ先のuuidをそろえる
#セット $/usr/bin/svnadmin setuuid /var/svn/repos/neko ${本体svnのuuid} #変更されていることを確認(本体のsvnのuuid調べるときもこのコマンド) $/usr/bin/svnlook uuid neko
svn本体からsvnsyncの設定
svnsync実行
$/usr/bin/svnsync sync svn+ssh://${バックアップ先のIP}/var/svn/repos/neko
動作確認
ちゃんとsyncできた?
最新のリビジョン番号みてみる
$/usr/bin/svnlook youngest neko
バックアップ先からチェックアウトできる?
適当なところからチェックアウトしてみて(ΦωΦ)♪
$svn checkout svn+ssh://${バックアップ先のIP}/var/svn/repos/neko #なんとなくからじゃないよねーって確認した $ ls
ちなみに、下準備でsetuuidをちゃんとしてないと、
本体から、バックアップに切り替えたときに
svn: Repository UUID 'fecb33dc-96d4-4d15-a2d6-66e738cd1f83' doesn't match expected UUID '7c6c9d4a-4ae7-452e-9002-9b899cebdb0f'
みたいなエラーがでてうっとおしいよ
そのほか
全然本質じゃないけど、大きなリポをバックアップ取るときは
バックグラウンドで流すのを忘れずに。。
$nohup /usr/bin/svnsync sync svn+ssh://${バックアップ先のIP}/var/svn/repos/neko &
バックアップ先で様子見など。。
$while true; do svnlook youngest repo; sleep 5; done
もっといい方法があるかもしれないけど、ひとまず。。
追記
同期先リポジトリのロックを取得できませんでした。現在 'hostname:378ba4cd-6fc1-48fa-bb22-33e092a7d8bb' が所持しています
途中でエラーになるとたまにでる
$ svn propdel svn:sync-lock --revprop -r 0 svn+ssh://${バックアップ先のIP}/data/svn/repos/neko 属性 'svn:sync-lock' をリポジトリのリビジョン 0 から削除しました
svnsync: Error while replaying commit
なんか、ファイル名に空白が入っていたよ(つд⊂)エーン
空白いやよー。
スキップオプションとかないので、こけたリビジョンのsvn diffとって
$svn diff -r 146:147 svn+ssh://${本体のIP}/var/svn/repos/neko
その変更をシンク先にコミット|o゚д゚)
なんかsync先のリビジョン番号をみているみたいなので、
うまくスキップできました。。。。
力技。。もっといい方法があるやも