CMS風のアプリケーションのCouchdDBを調べています。本番データベースのバックアップに関する一般的なパターン、ベストプラクティス、ワークフローアドバイスは何ですか?
開発とテストで使用するためにデータベースを複製するプロセスに特に興味があります。
実行中のインスタンスの下からディスク上のファイルをコピーするだけで十分ですか? 2つのライブ実行インスタンス間でデータベースデータのクローンを作成できますか?
使用するテクニックのアドバイスと説明は大歓迎です。
CouchDBはレプリケーションをサポートしているため、CouchDBの別のインスタンスにレプリケートし、そこからバックアップするだけで、変更を書き込む場所に影響を与えません。
http://wiki.Apache.org/couchdb/FrequentlyAskedQuestions#how_replication
文字通りPOSTリクエストをCouchDBインスタンスに送信して、どこに複製するかを伝え、それが機能します(tm)
編集:I/Oヒットを受け入れることができる限り、実行中のデータベースの下からファイルをcpすることができます。
もう1つ注意すべき点は、ライブデータベースの下からファイルをコピーできることです。大規模なデータベースが存在する可能性がある場合、テスト/本番マシンから別のマシンにOOBをコピーするだけです。
マシンの書き込み負荷によっては、コピー後にレプリケーションをトリガーして、ファイルのコピー時に進行中だった書き込みを収集することをお勧めします。ただし、いくつかのレコードの複製は、データベース全体の複製よりも高速です。
Paulの提案を2番目にしたいと思います。I/ O負荷のヒットを取得できる場合は、ライブサーバーの下からデータベースファイルをcp
だけです。とにかく複製されたコピーを実行する場合、マスターのパフォーマンスに影響を与えることなく、そこからも安全にコピーできます。
CouchDBは [〜#〜] zfs [〜#〜] のような最新のファイルシステムによって提供されるファイルシステムスナップショットでも非常にうまく機能します。データベースファイルは常に一貫した状態にあるため、CouchDBによって提供される整合性の保証を弱めることなく、いつでもファイルのスナップショットを取得できます。
これにより、I/Oオーバーヘッドはほとんど発生しません。あなたが持っている場合など誤ってデータベースからドキュメントを削除した場合は、スナップショットを別のマシンに移動して、そこに不足しているデータを抽出できます。本番データベースに複製して戻すこともできますが、私はそれを試したことはありません。
ただし、データベースファイルを移動するときは、常に同じcouchdbリビジョンを使用するようにしてください。ディスク上のフォーマットは、互換性のない方法で進化しています。
CouchDBの複製は恐ろしいものです。私は通常 tar を実行します。
.
で始まるサブディレクトリを取得してください。scp
tar.gzファイルを宛先ホストにコピーし、そこで一時的な場所に解凍します。chown
宛先のデータベースディレクトリにすでにあるファイルを所有するユーザーおよびグループにファイルを送信します。これはおそらくcouchdb:couchdbです。これまで重要なのは、ファイルのアクセス許可を台無しにすることが、このプロセスを台無しにしてしまった唯一の方法だからです。cp
ファイルを宛先ディレクトリーに入れます。再び私のホストでは、これは/ var/lib/couchdbです。