MongoDB Academy · レッスン

完全バックアップのためのmongodumpとmongorestore

データベース全体をBSONダンプとして作成し、mongorestoreを使って別のクラスターに復元します。

レッスン 3/413 ステップ

「完全バックアップのためのmongodumpとmongorestore」はCoddyKit上の無料MongoDB Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはMongoDB Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 MongoDB Academyコースには全4レッスンが含まれています。

バックアップに mongodump を使う理由

mongodump は、データベースまたはコレクションのバイナリ BSON スナップショットを作成します。人間が読みやすい JSON を生成する mongoexport とは異なり、mongodump は ObjectId、日付、Decimal、バイナリデータなど、すべての BSON 型情報を完全に保持し、忠実性が失われることはありません。そのため、MongoDB クラスター間でのデータベース全体のバックアップや移行には mongodump が適しています。一方、選択的なデータ共有には mongoexport が適しています。

mongodump の基本的な使用方法

引数なしで mongodump を実行すると、ローカルの MongoDB インスタンスにあるすべてのデータベースが dump/ ディレクトリにダンプされます。--uri、--db、必要に応じて --collection を指定すると、対象範囲を絞り込めます。出力ディレクトリにはデータベースごとにサブディレクトリが作成され、各コレクションについて .bson ファイルと .metadata.json ファイルが含まれます。

# Dump the entire 'myapp' database
mongodump \
  --uri 'mongodb://localhost:27017' \
  --db myapp \
  --out /backups/myapp-2024-01-15

# Output structure:
# /backups/myapp-2024-01-15/
#   myapp/
#     users.bson
#     users.metadata.json
#     products.bson
#     products.metadata.json

単一コレクションのダンプ

--collection を使用すると、データベースから 1 つのコレクションだけをダンプできます。単一の .bson ファイルと、それに対応する .metadata.json(インデックス定義を格納)ファイルが作成されます。対象を絞ったコレクションのダンプは、データベース全体をバックアップせずに、移行用として 1 つのコレクションを抽出する場合に便利です。

# Dump only the 'orders' collection
mongodump \
  --uri 'mongodb://localhost:27017' \
  --db myapp \
  --collection orders \
  --out /backups/orders-backup

# Result: /backups/orders-backup/myapp/orders.bson
#         /backups/orders-backup/myapp/orders.metadata.json

ダンプの圧縮

大規模な BSON ダンプは大量のディスク容量を消費することがあります。--gzip を使用すると、出力ファイルを書き込みながら圧縮できます。各 .bson ファイルは .bson.gz ファイルになり、一般的なドキュメントコレクションでは通常 5~10 倍に圧縮できます。圧縮は mongodump プロセス内で実行され、展開するには mongorestore で対応する --gzip フラグが必要です。

# Create a compressed backup
mongodump \
  --uri 'mongodb://localhost:27017' \
  --db myapp \
  --gzip \
  --out /backups/myapp-compressed-2024-01-15

# Files are now .bson.gz:
# /backups/myapp-compressed-2024-01-15/myapp/users.bson.gz
# /backups/myapp-compressed-2024-01-15/myapp/orders.bson.gz

単一ファイルへのアーカイブ

--archive を使用すると、ディレクトリツリーの代わりにダンプ全体を 1 つのアーカイブファイルに書き込めます。また、gzip や aws s3 cp にパイプして、圧縮バックアップとアップロードを 1 つの手順で実行することもできます。これは、CI や cron ジョブでバックアップを自動化する場合に、最もコンパクトで移植性の高いダンプ形式です。

# Archive + compress to a single file
mongodump \
  --uri 'mongodb://localhost:27017' \
  --db myapp \
  --archive=/backups/myapp-2024-01-15.archive.gz \
  --gzip

# Or pipe to gzip
mongodump \
  --uri 'mongodb://localhost:27017' \
  --db myapp \
  --archive | gzip > /backups/myapp-2024-01-15.gz

mongorestore の基本的な使用方法

mongorestore は、mongodump で作成したディレクトリまたはアーカイブを読み取り、対象の MongoDB クラスターにドキュメントを挿入します。データの読み込み後、.metadata.json ファイルに記録されたインデックス定義に基づいて、コレクションとそのインデックスを再作成します。--uri で対象クラスターを指定し、--dir または --archive でソースのディレクトリまたはアーカイブを指定します。

# Restore the full myapp database from a directory backup
mongorestore \
  --uri 'mongodb://restore-target:27017' \
  --dir /backups/myapp-2024-01-15

# Restore a gzip-compressed directory backup
mongorestore \
  --uri 'mongodb://restore-target:27017' \
  --gzip \
  --dir /backups/myapp-compressed-2024-01-15

別のデータベース名へのリストア

デフォルトでは、mongorestore はダンプ内と同じデータベース名にリストアします。--nsFrom と --nsTo(namespace の変換元と変換先)を使用すると、別のデータベース名やコレクション名にリストアできます。本番データを、異なる名前のステージングデータベースに複製する場合に不可欠です。

# Restore 'myapp' from dump into 'myapp_staging'
mongorestore \
  --uri 'mongodb://localhost:27017' \
  --nsFrom 'myapp.*' \
  --nsTo 'myapp_staging.*' \
  --dir /backups/myapp-2024-01-15

リストア時の --drop フラグ

mongoimport と同様に、mongorestore にはリストア前に各コレクションを削除する --drop フラグがあります。--drop を指定しない場合、mongorestore はリストアするドキュメントを既存のデータに統合します。これは部分的なリストアに便利です。--drop を指定するとコレクションを完全に置き換えられるため、バックアップと古いデータが混在するのを防ぎ、データベース全体をリストアする場合により安全です。

# Drop and fully replace all collections during restore
mongorestore \
  --uri 'mongodb://localhost:27017' \
  --db myapp \
  --drop \
  --dir /backups/myapp-2024-01-15/myapp

--numParallelCollections による並列リストア

コレクション数が多いデータベースでは、mongorestore によって複数のコレクションを並列にリストアできます。--numParallelCollections(デフォルト: 4)を使用すると、I/O 性能の高いサーバーで並列度を上げられます。並列リストアを増やすとリストア全体の時間は短縮できますが、クライアントとサーバーの両方でメモリと CPU の使用量が増加します。

# Restore 8 collections in parallel
mongorestore \
  --uri 'mongodb://restore-target:27017' \
  --dir /backups/myapp-2024-01-15 \
  --numParallelCollections 8

Cron ジョブによるバックアップの自動化

cron ジョブからシェルスクリプトを実行して、毎日のバックアップを自動化できます。スクリプトでは、タイムスタンプ付きのバックアップディレクトリを作成し、mongodump を実行して結果を圧縮し、必要に応じて S3 などのリモートストレージにアップロードします。以前のバックアップが上書きされる前に失敗を検出できるよう、必ず mongodump の終了コードを確認してください。

#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backups/myapp-$DATE"

mongodump \
  --uri "$MONGO_URI" \
  --db myapp \
  --gzip \
  --out "$BACKUP_DIR"

if [ $? -eq 0 ]; then
  echo "Backup successful: $BACKUP_DIR"
else
  echo "Backup FAILED!"
  exit 1
fi

Atlas のポイントインタイムバックアップ

MongoDB Atlas は自動ポイントインタイム(PIT)バックアップを提供します。6 時間ごとにスナップショットを取得し、保持期間内の任意の秒時点(M10 以上のティアでは最大 35 日)にリストアできます。Atlas のバックアップでは mongodump を使用せず、ストレージエンジンレベルのファイルシステムスナップショットを利用するため、影響なくバックアップできます。セルフホスト型 MongoDB では mongodump が主要なバックアップ手段ですが、これは論理バックアップであり、実行中のトランザクションを取得することはできません。

確認テスト

このレッスンで学んだ MongoDB と NoSQL データベースの概念について理解度を確認しましょう。

レッスンのまとめ

このレッスンでは、mongodump はすべての型情報を保持したバイナリ BSON バックアップを作成すること、mongorestore はそのダンプを読み取り、インデックス付きでコレクションを再作成すること、そして--drop、--nsFrom/--nsTo、--gzip は本番環境のバックアップワークフローに不可欠なフラグであることを学びました。次は、開発中に MongoDB へプログラムでデータを読み込む Node.js シードスクリプトを作成します。

無料で開始

AI チューターと学ぶ JavaScript — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「完全バックアップのためのmongodumpとmongorestore」レッスンは無料ですか?

はい。「完全バックアップのためのmongodumpとmongorestore」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、MongoDB Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 MongoDB Academyコースには全4レッスンが含まれています。

「完全バックアップのためのmongodumpとmongorestore」で何を学びますか?

データベース全体をBSONダンプとして作成し、mongorestoreを使って別のクラスターに復元します。 ブラウザで直接実行するハンズオンコードでMongoDB Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

MongoDB Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのMongoDB Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「完全バックアップのためのmongodumpとmongorestore」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このMongoDB Academyレッスンでコードを書いて実行できますか?

はい。すべてのMongoDB Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. mongoimport:JSONとCSVファイルの読み込み
  2. mongoexport:コレクションのファイルへの書き出し
  3. 完全バックアップのためのmongodumpとmongorestore
  4. Node.jsスクリプトによるデータのシード
← MongoDB Academyに戻る