「svnadmin load」と「svnsync init/sync」の組み合わせてリポジトリの同期を取るやり方

「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」を組み合わせることで解決しました。

では、以下手順です。

  1. ローカルサーバで、「svnadmin dump」を利用してリポジトリをフルバックアップする

    $ sudo svnadmin dump /home/subversion/repos > repos.svndump

  2. リモートサーバへ「repos.svndump」を転送後、「svnadmin load」する

    $ sudo svndmin load /home/subversion/repos < repos.svndump

  3. ローカルサーバから、「–allow-non-empty 」オプションを付けて「svnsync init」する

    $ svnsync init http://local/repos http://remote/repos –allow-non-empty (OPTION)

  4. ローカルサーバから、「svnsync sync」する

    $ svnsync sync http://remote/repos

以上の手順で、「svnadmin dump」のファイルのインポート後から「svnsync sync」が利用できるようになります

【関連エントリ】

ref. Subversionのリポジトリをsvnsyncを利用して常時同期する
ref. svnsync中に「同期先リポジトリのロックを取得できませんでした」と表示される場合の対処法
ref. svnsync中に「Could not read respose body」エラーを吐く場合の対処法