暂无图片
通过mongodump备份+oplog恢复数据
最近更新:2023-11-01 09:01:28

适用范围

mongodb 4.X

问题概述

通过mongodump备份+oplog恢复数据.

解决方案

1. 背景:

这个一个基于oplog进行mongodb数据库不完全恢复的模拟,即模拟一个collection误删除的恢复。 模拟场景:

  1. 指定的db.collection(my_userdata.my_stock)有2条记录;
  2. 进行db的备份;
  3. 继续插入6行数据;
  4. 误删除collection;
  5. 通过mongodb备份+oplog恢复collection到吴删除前的状态。

2. 准备数据环境:

MongoDB Enterprise mongos> use my_userdata
switched to db my_userdata
MongoDB Enterprise mongos> show collections;show collections;
characters
inventory
movies
my_stock
people
Transactions

--以下所有的操作基于collection my_stock来进行开展:

MongoDB Enterprise mongos> db.my_stock.find().pretty()db.my_stock.find().pretty()
{
        "_id" : ObjectId("631cc6f96fc89c0c64679c30"),
        "name" : "农期指数",
        "market" : "OTH",
        "ts_code" : "000001.CZC",
        "category" : "商品指数",
        "exp_date" : null,
        "fullname" : "农期指数",
        "base_date" : null,
        "describle" : null,
        "list_date" : null,
        "publisher" : "郑州商品交易所",
        "base_point" : 1000,
        "index_type" : null,
        "weight_rule" : "其他"
}
{
        "_id" : ObjectId("631cc78c6fc89c0c64679c31"),
        "name" : "上证指数",
        "market" : "SSE",
        "ts_code" : "000001.SH",
        "category" : "综合指数",
        "exp_date" : null,
        "fullname" : "上证综合指数",
        "base_date" : "1990-12-19",
        "describle" : "上证综合指数由在上海证券交易所上市的符合条件的股票与存托凭证组成样本,反映上海证券交易所上市公司的整体表现。",
        "list_date" : "1991-07-15",
        "publisher" : "中证公司",
        "base_point" : 100,
        "index_type" : "中证综合指数",
        "weight_rule" : "其他"
}
MongoDB Enterprise mongos> 

3. 导出数据:

备份导出数据库

mongodump  --host 127.0.0.1:27018 -uadmin -padmin@2020  --authenticationDatabase admin -d my_userdata -o /user_data/mongo_backup 
 
[root@serv-node2 mongo_backup]# mongodump  --host 127.0.0.1:27018 -uadmin -padmin@2020  --authenticationDatabase admin -d my_userdata -o /user_data/mongo_backup 
2022-09-11T01:59:21.259+0800    writing my_userdata.transactions to /user_data/mongo_backup/my_userdata/transactions.bson
2022-09-11T01:59:21.260+0800    writing my_userdata.inventory to /user_data/mongo_backup/my_userdata/inventory.bson
2022-09-11T01:59:21.261+0800    writing my_userdata.movies to /user_data/mongo_backup/my_userdata/movies.bson
2022-09-11T01:59:21.265+0800    done dumping my_userdata.inventory (5 documents)
2022-09-11T01:59:21.268+0800    writing my_userdata.people to /user_data/mongo_backup/my_userdata/people.bson
2022-09-11T01:59:21.269+0800    writing my_userdata.characters to /user_data/mongo_backup/my_userdata/characters.bson
2022-09-11T01:59:21.281+0800    done dumping my_userdata.characters (2 documents)
2022-09-11T01:59:21.295+0800    writing my_userdata.my_stock to /user_data/mongo_backup/my_userdata/my_stock.bson
2022-09-11T01:59:21.311+0800    done dumping my_userdata.my_stock (2 documents) --记住这个时间点,后面有用。
2022-09-11T01:59:21.591+0800    done dumping my_userdata.transactions (1746 documents)
2022-09-11T01:59:22.412+0800    done dumping my_userdata.people (50474 documents)
2022-09-11T01:59:22.826+0800    done dumping my_userdata.movies (23530 documents)

备份导出数据库某个集合(临时测试的,不需要过多关注)

mongodump  --host 127.0.0.1:27018 -uadmin -padmin@2020  --authenticationDatabase admin -d my_userdata -c my_stock -o /user_data/mongo_backup 
 
......