免責事項: 私は Tokutek で働いており、TokuMX に取り組んでいるエンジニアです。
TokuMX のバックアップを作成する「最善の」方法はありません。各アプリケーションは異なるため、すべてのオプションを理解し、自分で決定することをお勧めします。
TokuMX のバックアップ オプションは次のとおりです。
- エンタープライズ ホット バックアップ。
- ファイルシステム レベルのスナップショット (LVM、EBS、xfs_freeze) で、dbpath と logDir のすべてをコピーします。
- モンゴダンプを使用。
クライアント スレッドが何もしていない場合でも、バックグラウンド スレッドは引き続きファイル システムに書き込みを行うため、 fsyncLock は機能しないことに注意してください。fsyncLock のみを使用すると、バックアップが破損する可能性があります。
ファイルシステム スナップショットとエンタープライズ ホット バックアップの両方には、シリアル化された圧縮データをコピーするという利点があるため、すべてのコレクションをクエリし、圧縮されていない BSON データをネットワーク経由で転送するコストを回避できます。さらに、これらのオプションは最も重要なデータに関するキャッシュ テーブル内の情報を破壊しませんが、mongodump はすべてをページインさせ、アプリケーションに役立つデータを削除する可能性があります。
エンタープライズ ホット バックアップには、ファイル システム レベルのスナップショットよりも安価であり (スナップショットの場合のように余分なスペースを予約する必要がない)、I/O クォータを満たすために調整できるという追加の利点があります。バックアップの状態は、バックアップの開始時ではなく、バックアップの完了時の状態です。したがって、バックアップのためにデータをコピーするのに 12 時間かかる場合、ファイルシステム レベルのスナップショット バックアップは、ホット バックアップ プラグインで作成された同等のバックアップよりも 12 時間遅れます。
パフォーマンス、キャッシュの無効化、ネットワーク帯域幅、または最新性を気にしないのであれば、単純な用途では mongodump が最適なオプションかもしれません。また、単一のデータベースまたはコレクションのバックアップをサポートする唯一のオプションでもあります。
mongodump の場合、その使用法は MongoDB の場合と同じです。サーバーが実行されているホストとポートを使用する必要があります。デフォルトは 27017 です。これがデフォルトの場合、 --port オプションを指定する必要はありません。
間違いなくcronで毎日実行できます。次のようなことをお勧めします:
SHELL=/bin/bash
0 0 * * * /usr/bin/mongodump --host <host> -o "/var/lib/backup/tokumx-backup-$(date +%Y%m%d)"
mongodump の主な落とし穴は、より高価であり、どのデータが重要であるかを示すキャッシュ テーブル内の情報を破壊することです。また、ホット バックアップやファイル システム レベルのスナップショット バックアップのように、複数のコレクションにわたって完全に一貫性のあるスナップショットを取得することもできません。mongodump には、あるコレクションの一部の書き込みの影響が含まれていて、別のコレクションの以前の書き込みの影響が含まれていない場合があります。
また、古いバックアップを期限切れにするためのスキームを定義することも必要になると思います。