とても良い一日、
以下のようなmongodbにスーパーユーザー権限を持つユーザーがいます(show users
コマンドを使用してロール設定を確認しました)
{
"_id" : "admin.mongoadmin",
"user" : "mongoadmin",
"db" : "admin",
"roles" : [
{
"role" : "readWrite",
"db" : "admin"
},
{
"role" : "root",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
mongorestoreを使用してoplogを復元しようとすると、エラーが発生します。
失敗:復元エラー:oplogの適用エラー:applyOps:管理者によるコマンドの実行は許可されていません {applyOps:[{ts:Timestamp(1552828309、1)、h:4632811839329880092、v:2、op: " c "、ns:" admin。$ cmd "、o:{create:" system.keys "、idIndex:{v:2、key:{_id:1}、name:" id "、ns:" admin.system.keys "}}、o2:{}}]、$ db:" admin "}
mongorestore -u admin -p password --authenticationDatabase=admin --oplogFile 0000000000_0_oplog.bson --oplogReplay --oplogLimit=1552828432 --dir='/oplog/temp'
2019-03-17T13:47:36.945+0000 preparing collections to restore from
2019-03-17T13:47:36.945+0000 replaying oplog
2019-03-17T13:47:36.962+0000 Failed: restore error: error applying oplog: applyOps: not authorized on admin to execute command { applyOps: [ { ts: Timestamp(1552828309, 1), h: 4632811839329880092, v: 2, op: "c", ns: "admin.$cmd", o: { create: "system.keys", idIndex: { v: 2, key: { _id: 1 }, name: "_id_", ns: "admin.system.keys" } }, o2: {} } ], $db: "admin" }
[〜#〜] note [〜#〜]:bsondumpから取得した最後の値でoploglimit(--oplogLimit = 1552828432)を指定しましたこれは正しいですか?または、何か不足していますか?
(すなわち)
{"ts":{"$timestamp":{"t":1552828432,"i":79}},"t":{"$numberLong":"1"},"h":{"$numberLong":"-2072015676601300967"},"v":2,"op":"i","ns":"inventory.hari","ui":{"$binary":"avdlGH8AS1eBPXRytlO1Yg==","$type":"04"},"wall":{"$date":"2019-03-17T13:13:52.139Z"},"o":{"_id":"79","name":"Hari","role":"Developer","isEmployee":true}}
{"ts":{"$timestamp":{"t":1552828432,"i":80}},"t":{"$numberLong":"1"},"h":{"$numberLong":"-6279494628130059002"},"v":2,"op":"u","ns":"inventory.hari","ui":{"$binary":"avdlGH8AS1eBPXRytlO1Yg==","$type":"04"},"o2":{"_id":"79"},"wall":{"$date":"2019-03-17T13:13:52.139Z"},"o":{"_id":"79","name":"WD_Userjava.util.Random@9a7504c","role":"Developer","isEmployee":true}}
編集:
以下のように復元しました
mongorestore -u mongoadmin -p password --authenticationDatabase admin -d itsm_inventory -c hari 0000000000_0_oplog.bson
成功したようです
このように挿入しました
{ "_id" : "0", "name" : "WD_Userjava.util.Random@2bbf4b8b", "role" : "Developer", "isEmployee" : true }
{ "_id" : "1", "name" : "WD_Userjava.util.Random@7a765367", "role" : "Developer", "isEmployee" : true }
以下のように復元されます
{ "_id" : ObjectId("5c91eac58fe872c878289d83"), "ts" : Timestamp(1552888901, 2), "t" : NumberLong(1), "h" : NumberLong("-3584326290393879639"), "v" : 2, "op" : "i", "ns" : "itsm_inventory.hari", "ui" : UUID("b5f574f1-c55a-4a5b-8729-4483f56f5c9d"), "wall" : ISODate("2019-03-18T06:01:41.062Z"), "o" : { "_id" : "1", "name" : "WD_Userjava.util.Random@7a765367", "role" : "Developer", "isEmployee" : true } }
{ "_id" : ObjectId("5c91eac58fe872c878289d84"), "ts" : Timestamp(1552888901, 3), "t" : NumberLong(1), "h" : NumberLong("-3618415120025822301"), "v" : 2, "op" : "i", "ns" : "itsm_inventory.hari", "ui" : UUID("b5f574f1-c55a-4a5b-8729-4483f56f5c9d"), "wall" : ISODate("2019-03-18T06:01:41.062Z"), "o" : { "_id" : "2", "name" : "WD_Userjava.util.Random@76b0bfab", "role" : "Developer", "isEmployee" : true } }
マニの回答編集:
mongorestore -u mongoadmin -p password --authenticationDatabase=admin --oplogFile 0000000000_0_oplog.bson --oplogReplay --oplogLimit=1553063755 --dir='/oplog/temp'
2019-03-21T10:46:42.435+0000 preparing collections to restore from
2019-03-21T10:46:42.435+0000 replaying oplog
2019-03-21T10:46:42.457+0000 Failed: restore error: error applying oplog: applyOps: not authorized on admin to execute command { applyOps: [ { ts: Timestamp(1552888562, 3), h: -8964353497436574374, v: 2, op: "c", ns: "admin.$cmd", o: { create: "system.keys", idIndex: { v: 2, key: { _id: 1 }, name: "_id_", ns: "admin.system.keys" } }, o2: {} } ], $db: "admin" }
どんな助けでもありがたいです。前もって感謝します。
MongoDB jiraブログ ここmongorestore
--oplog
によると、mongodump
操作中に取得されたoplogエントリは適用されず、mongorestoreを使用しようとするとエラーで終了します復元の役割と、アクセス制御を使用するMongoDBデプロイメントを使用します。詳細については、 restore role のドキュメントを参照してください。
それは2.6.10
、3.04
のようなMongoDBバージョンに影響するためです。このようなエラーを回避するには、MongoDBを現在のバージョンに更新する必要があります。復元ロールは、applyOps
コマンドへのアクセスをユーザーに提供しません。mongorestore
は--oplogReplay
オプションで使用します。
[〜#〜]回避策[〜#〜]
mongorestore
--oplogReplay
オプションを使用してデータを復元するには、ユーザーは ロールを作成するanyAction を許可する anyResource を付与できます。このロールを他のユーザーに割り当てないでください。この役割は、システムへの完全な無制限のアクセスを提供します。
あるいは、ユーザーは、インストール中に--auth
オプションなしでmongodインスタンスを開始し、復元の完了後に--auth
を再度有効にすることで、データの復元中に認証を無効にすることができます。
OPとの会話後(ハリー)&編集
MongoDBで「.bson」ファイルを復元する方法
C:\Program Files\MongoDB\Server\4.0\bin>mongorestore -d test -c oplog C:\data\oplog.bson
2019-03-20T10:06:35.981+0300 checking for collection data in C:\data\oplog.bson
2019-03-20T10:06:35.985+0300 restoring test.oplog from C:\data\oplog.bson
2019-03-20T10:06:37.058+0300 no indexes to restore
2019-03-20T10:06:37.058+0300 finished restoring test.oplog (10138 documents)
2019-03-20T10:06:37.059+0300 done
上記のmongorestoreコマンドでは、testはデータベース名&oplogです。コレクション名です。 C:\data\oplog.bson
は.bson
ファイルパスの場所です。
さらにあなたの参照 ここ
アップロードした oplogファイル に基づいて、最小タイムスタンプは1552888560
、最大タイムスタンプは1553063754
です。ただし、質問で述べた--oplogLimit=1552828432
は、タイムスタンプの最小値よりも小さい制限内にありません。そのため、どのドキュメントも復元されませんでした。
0000000000_0_oplog.bson
ファイルが存在するフォルダーから次のコマンドを実行します。
mongorestore -u admin -p password --authenticationDatabase=admin --oplogFile 0000000000_0_oplog.bson --oplogReplay --oplogLimit=1553063755 --dir='/oplog/temp'
また、
.bson
フォルダに/oplog/temp
ファイルが存在しないことを確認してください。