MongoDBのCURD基本操作(四):削除、バックアップ及び回復
27272 ワード
注:本文はMongoDB 4.2.6に基づいて作成する
ドキュメントを削除する
ドキュメントを削除するには、まずこのドキュメントに一致する必要がありますが、一致ルールではupdate()およびfind()と一致します.
ただし、remove()は一致するすべてのドキュメントを削除します.コレクションのすべてのドキュメントを削除
注意:remove()は、すべてのドキュメントを削除するときにクエリー文、すなわち{}を追加する必要があります.そうしないと、エラーが発生します.また、remove()はコレクション自体を削除しません.コレクション を削除
コレクションを削除する必要がある場合はdrop()を使用します.データベース を削除
ディレクトリバックアップは、直接cpまたはrsyncコマンドを使用してMongoDBのデータディレクトリをコピーしますが、コピーする前にすべてのmongodインスタンスを停止する必要があります.そうしないと、コピーしたファイルに書き込みがあると、バックアップのデータが一致しません.もちろん、インスタンスを停止することはできませんが、キャッシュをブラシして書き込みを禁止する必要があります.この場合、読み取りが正常に行われることを保証することができます.次のコマンドでデータベースをロックすることができます. .
バックアップが完了したら、次のコマンドを使用してロックを解除します. mongodumpコマンドバックアップ
ここで、-dデータベース名の指定-uユーザー名の指定-pパスワードの指定–authenticationDatabase認証に接続するデータベースの指定–hostデータベースipおよびポート番号の指定-oバックアップファイル格納パスの指定
実行すると、対応するディレクトリにバックアップ情報を表示できます.
dumpから出てきたファイルについてはbsondumpファイルで見ることができます.
バックアップには、バックアップに時間がかかるという問題もあります.そのため、バックアップ時のデータ変更の処理方法を考慮する必要があります.うっかりするとデータが一致しない場合があります.この場合、<--oplog>パラメータを使用しますが、バックアップの開始から終了までの間のデータベースのすべての操作を保存し、バックアップの回復時にデータの一貫性を保証するために、この操作を再生します.
バックアップ後、このデータベースのセットを削除し、異常をシミュレートします.
そして先ほどバックアップしたデータでリカバリしmongorestoreコマンドを使用し、
リカバリが完了したら、データベースでデータを表示し、整合性を確認します.
もちろん、バックアップ時に<--oplog>パラメータが使用されている場合は、リカバリ時に<--oplogReplay>パラメータを使用して、操作を再生する必要があります.
1、削除
> db.bb.find().pretty()
{
"_id" : ObjectId("5ed6549830571733ccb3d678"),
"jordan" : 23,
"haha" : "ending"
}
{
"_id" : ObjectId("5ed6549830571733ccb3d679"),
"kobe" : 24,
"haha" : "ending"
}
> db.bb.remove({jordan: 23})
WriteResult({ "nRemoved" : 1 })
> db.bb.find().pretty()
{
"_id" : ObjectId("5ed6549830571733ccb3d679"),
"kobe" : 24,
"haha" : "ending"
}
ドキュメントを削除するには、まずこのドキュメントに一致する必要がありますが、一致ルールではupdate()およびfind()と一致します.
ただし、remove()は一致するすべてのドキュメントを削除します.
> db.bb.find().pretty()
{
"_id" : ObjectId("5ed6549830571733ccb3d679"),
"kobe" : 24,
"haha" : "ending"
}
{
"_id" : ObjectId("5ed6549830571733ccb3d67a"),
"tmac" : 1,
"haha" : "ending"
}
{
"_id" : ObjectId("5ed6554230571733ccb3d67b"),
"name" : "jay",
"hello" : "ball",
}
> db.bb.remove({"haha" : "ending"})
WriteResult({ "nRemoved" : 2 })
> db.bb.find().pretty()
{
"_id" : ObjectId("5ed6554230571733ccb3d67b"),
"name" : "jay",
"hello" : "ball"
}
> db.aa.find().pretty()
{ "_id" : ObjectId("5ed7b329582b5fea09b920a6"), "name" : "aa", "id" : 100 }
{ "_id" : ObjectId("5ed7b351582b5fea09b920a7"), "name" : "bb", "id" : 101 }
> db.aa.remove()
2020-06-03T10:30:01.574-0400 E QUERY [js] uncaught exception: Error: remove needs a query :
DBCollection.prototype._parseRemove@src/mongo/shell/collection.js:357:15
DBCollection.prototype.remove@src/mongo/shell/collection.js:384:18
@(shell):1:1
> db.aa.remove({})
WriteResult({ "nRemoved" : 2 })
> db.aa.find().pretty()
> show collections
aa
注意:remove()は、すべてのドキュメントを削除するときにクエリー文、すなわち{}を追加する必要があります.そうしないと、エラーが発生します.また、remove()はコレクション自体を削除しません.
コレクションを削除する必要がある場合はdrop()を使用します.
> db.aa.find().pretty()
{ "_id" : ObjectId("5ed7b4f5582b5fea09b920ac"), "name" : "aa", "id" : 100 }
{ "_id" : ObjectId("5ed7b4f8582b5fea09b920ad"), "name" : "bb", "id" : 101 }
> db.aa.drop()
true
> show collections
>
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
> db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
2、バックアップ
> db.fsyncLock()
{
"info" : "now locked against writes, use db.fsyncUnlock() to unlock",
"lockCount" : NumberLong(1),
"seeAlso" : "http://dochub.mongodb.org/core/fsynccommand",
"ok" : 1
}
バックアップが完了したら、次のコマンドを使用してロックを解除します.
> db.fsyncUnlock()
{ "info" : "fsyncUnlock completed", "lockCount" : NumberLong(0), "ok" : 1 }
mongodump -d dbname -u username -p password --authenticationDatabase admin --host="mongodb-ip:27017" -o /home/data/mydb_$(date +%Y%m%d)
ここで、-dデータベース名の指定-uユーザー名の指定-pパスワードの指定–authenticationDatabase認証に接続するデータベースの指定–hostデータベースipおよびポート番号の指定-oバックアップファイル格納パスの指定
実行すると、対応するディレクトリにバックアップ情報を表示できます.
[root@localhost data]# mongodump -d abc -u root -p root --authenticationDatabase admin --host="localhost:27017" -o /home/mongodb/data/db_$(date +%Y%m%d)
2020-06-20T23:32:59.930-0400 writing abc.bb to
2020-06-20T23:32:59.931-0400 done dumping abc.bb (2 documents)
[root@localhost data]# ls
db_20200620
[root@localhost data]# cd db_20200620/
[root@localhost db_20200620]# ls
abc
[root@localhost db_20200620]# cd abc/
[root@localhost abc]# ls
bb.bson bb.metadata.json
dumpから出てきたファイルについてはbsondumpファイルで見ることができます.
[root@localhost abc]# bsondump bb.bson
{"_id":{"$oid":"5ed6554230571733ccb3d67b"},"name":"jay","hello":"ball","animals":{"dog":{"$numberDouble":"50.0"},"cat":{"$numberDouble":"100.0"}},"happy":"ending","players":[{"name":"aa","score":{"$numberDouble":"98.0"}},{"name":"dan","score":{"$numberDouble":"95.0"}},{"name":"du","score":{"$numberDouble":"100.0"}}]}
{"_id":{"$oid":"5ed6579b30571733ccb3d67c"},"name":"jack","hello":"may","happy":"ending","players":[{"name":"aa","score":{"$numberDouble":"99.0"}},{"name":"dan","score":{"$numberDouble":"98.0"}},{"name":"du","score":{"$numberDouble":"90.0"}}]}
2020-06-20T23:44:27.676-0400 2 objects found
バックアップには、バックアップに時間がかかるという問題もあります.そのため、バックアップ時のデータ変更の処理方法を考慮する必要があります.うっかりするとデータが一致しない場合があります.この場合、<--oplog>パラメータを使用しますが、バックアップの開始から終了までの間のデータベースのすべての操作を保存し、バックアップの回復時にデータの一貫性を保証するために、この操作を再生します.
3、回復
バックアップ後、このデータベースのセットを削除し、異常をシミュレートします.
> db
abc
> show collections
bb
> db.bb.drop()
true
>
そして先ほどバックアップしたデータでリカバリしmongorestoreコマンドを使用し、
[root@localhost data]# mongorestore --host=localhost:27017 -u root --authenticationDatabase=admin /home/mongodb/data/db_20200620
Enter password:
2020-06-20T23:56:38.747-0400 preparing collections to restore from
2020-06-20T23:56:38.747-0400 reading metadata for abc.bb from /home/mongodb/data/db_20200620/abc/bb.metadata.json
2020-06-20T23:56:38.754-0400 restoring abc.bb from /home/mongodb/data/db_20200620/abc/bb.bson
2020-06-20T23:56:38.757-0400 no indexes to restore
2020-06-20T23:56:38.757-0400 finished restoring abc.bb (2 documents, 0 failures)
2020-06-20T23:56:38.757-0400 2 document(s) restored successfully. 0 document(s) failed to restore.
リカバリが完了したら、データベースでデータを表示し、整合性を確認します.
> show collections
bb
> db.bb.find()
{ "_id" : ObjectId("5ed6554230571733ccb3d67b"), "name" : "jay", "hello" : "ball", "animals" : { "dog" : 50, "cat" : 100 }, "happy" : "ending", "players" : [ { "name" : "aa", "score" : 98 }, { "name" : "dan", "score" : 95 }, { "name" : "du", "score" : 100 } ] }
{ "_id" : ObjectId("5ed6579b30571733ccb3d67c"), "name" : "jack", "hello" : "may", "happy" : "ending", "players" : [ { "name" : "aa", "score" : 99 }, { "name" : "dan", "score" : 98 }, { "name" : "du", "score" : 90 } ] }
>
もちろん、バックアップ時に<--oplog>パラメータが使用されている場合は、リカバリ時に<--oplogReplay>パラメータを使用して、操作を再生する必要があります.