1. ホーム
  2. mongodb

[解決済み】MongoDBデータベースの名前を変更する方法とは?

2022-02-20 22:43:27

質問内容

MongoDBのデータベース名にタイプミスがあり、データベース名を変更したいと考えています。

できること コピー というように削除してください...

db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();

データベースの名前を変更するコマンドはありますか?

解決方法を教えてください。

いいえ、そんなことはありません。参照 https://jira.mongodb.org/browse/SERVER-701

残念ながら、オリジナルの(デフォルトの)ストレージエンジンでデータベースのメタデータを保存する方法のため、これは私たちにとって簡単な機能ではありません。MMAPv1ファイルでは、すべてのコレクションとインデックスを記述する名前空間(例:dbName.collection)にデータベース名が含まれているため、一連のデータベースファイルの名前を変更するには、すべての名前空間文字列を書き換える必要があります。これは、次のような影響があります。

  • .nsファイル
  • コレクションに含まれるすべての番号付きファイル
  • 各インデックスの名前空間
  • 各コレクションとインデックスの内部一意名
  • system.namespacesとsystem.indexの内容(または将来的には同等の内容)。
  • その他、私が見逃している可能性のある場所

これは、単一のデータベースのリネームを達成するだけで、そのデータベースを スタンドアロン mongodインスタンスです。レプリカセットの場合、上記を全てのレプリカノードで行う必要があり、さらに各ノードでこのデータベースを参照している全ての oplog エントリを何らかの方法で無効化または書き換える必要があります。また、DB がシャーディングされたクラスタの場合、これらの変更を全てのシャードに追加する必要があり、さらに Config Server には名前空間に関する全てのシャードメタデータとそのフルネームが含まれています。

本番のシステムでこれをやるのは絶対に無理でしょう。

オフラインで行うには、新しい名前に対応するためにデータベースファイルをひとつひとつ書き直す必要があり、その時点で現在の "copydb" コマンドと同じくらい遅くなるでしょう......。