「svnadmin load」と「svnsync init/sync」の組み合わせてリポジトリの同期を取るやり方
2011年12月6日「svnadmin load」と「svnsync init/sync」の組み合わせてリポジトリの同期を取るやり方
今日一日散々振り回された結果、ようやく解決策が見つかったのでメモ。
ヘルプにも載ってないし、どこにも記載がなかったので細かく書いておきます。
【要件】
- svnsyncを利用してミラーリングをしたい
- svnsync sync時に何らかの形でアボートしてしまう
- svnadmin dump/loadが利用できる環境である
【詳細】
【要件】にも記載した通り、svnsync中に何らかの形でアボートを繰り返す場合があります。(ありました)
Subversionクライアントをアップグレードすることで、一部解決も出来ましたが、大容量のファイルを含むコミットのsyncがどうしても上手くいきませんでした。
クライアント設定である、~/.subversion/serversのhttp-timeoutの設定を変更しても、”Could not read response body”エラーが発生して処理が中断されます。
また、ApacheのKeepAliveなどの設定変更も試みましたが、状況は改善されませんでした。
【解決方法】
解決方法は、非常にシンプルでした。(どこにも記載はありませんでしたが)
表題の通り、「svnadmin dump/load」と「svnsync init/sync」を組み合わせることで解決しました。
では、以下手順です。
- ローカルサーバで、「svnadmin dump」を利用してリポジトリをフルバックアップする
$ sudo svnadmin dump /home/subversion/repos > repos.svndump
- リモートサーバへ「repos.svndump」を転送後、「svnadmin load」する
$ sudo svndmin load /home/subversion/repos < repos.svndump
- ローカルサーバから、「–allow-non-empty 」オプションを付けて「svnsync init」する
$ svnsync init http://local/repos http://remote/repos –allow-non-empty (OPTION)
- ローカルサーバから、「svnsync sync」する
$ svnsync sync http://remote/repos
以上の手順で、「svnadmin dump」のファイルのインポート後から「svnsync sync」が利用できるようになります
【関連エントリ】
ref. Subversionのリポジトリをsvnsyncを利用して常時同期する
ref. svnsync中に「同期先リポジトリのロックを取得できませんでした」と表示される場合の対処法
ref. svnsync中に「Could not read respose body」エラーを吐く場合の対処法