製品サーバーでmongoデータベースをバックアップしてから、ステージングサーバーに復元してから復元しようとしました。ここにいくつかの問題があります。dbには多くのコレクションがあります。ステージングサーバーで復元したくないコレクションを無視したいです。
ステージングデータベースをダンプし、製品データベースをダンプしてから-dropオプションを使用して製品をステージングに復元することで、これにアプローチできます。ステージングデータベースの指定されたコレクションを復元します。ええと、それは本当に悪いです。
1。生産データベースのダンプ
mongodump --Host product-server-Host --username abcd --password bcda -d db -o pruduct-dump-dir
2。ステージングデータベースのダンプ
mongodump --Host staging-server-Host --username abcd --password bcda -d db -o staging -dump-dir
。すべてのコレクションを復元してからコレクションを復元する pruduct-dump-dirをステージングサーバーに復元する
mongorestore --Host staging-server-Host --username abcd --password bcda --drop pruduct-dump-dir
mongorestore --Host staging-server-Host --username abcd --password bcda --drop --collection coll pruducting-dump-dir
ダンプするときにignore-collectionなどのオプションはありますか?どんな提案も歓迎されます:3
バージョン3.0.0から利用可能になりました
--excludeCollection <collection_name>
--excludeCollectionsWithPrefix <collection_prefix>
繰り返して1つ以上を除外します
チェックアウト ドキュメント
あなたは付け加えられます --collection COLLECTION_NAME
必要なコレクションをダンプします。デフォルトでは、データベースからダンプするコレクションを指定しない場合、 MongoDump はそのデータベース内のすべてのコレクションをダンプします。
Mongo 3.4では、Mongoデータベースダンプから復元するときに--nsExclude <namespace pattern>
オプションを指定できるようになりました。これにより、指定したネームスペースが復元操作から除外されます。これは、mongodump
操作が既に発生している場合に特に便利です。
公式ドキュメント: https://docs.mongodb.com/manual/reference/program/mongorestore/#cmdoption-nsexclude
ワイルドカードを使用して複数のコレクションを除外できます。
mongorestore --db test --nsExclude 'test.*_tmp'
または、複数の--nsExclude
オプションを指定しても同様に機能します。
mongorestore --db test --nsExclude 'test.collection1' --nsExclude 'test.collection2'
mongodump --db test --excludeCollection=users --excludeCollection=salaries
Mongo dbのバックアップ中も同じことをしなければなりませんでした。 python(または他の言語))を使用する場合、同様のアプローチを使用できます。mongodumpを実行した後、不要なコレクションのbsonおよびmetadata.jsonファイルを簡単に削除する必要があります。
import os
EXCLUDE_COLLECTIONS = ['collection_1', 'collection_2']
db_dump_path = "/Path/to/mongodump"
db_name = "name_of_db"
for collection_name in EXCLUDE_COLLECTIONS:
bson_file_path = os.path.join(db_dump_path, db_name, '{}.bson'.format(collection_name)
meta_file_path = os.path.join(db_dump_path, db_name, '{}.metadata.json'.format(collection_name)
if os.path.exists(bson_file_path) and os.path.exists(meta_file_path):
os.remove(bson_file_path)
os.remove(meta_file_path)