0%

MongoDB备份还原

情商(Emotional Quotient)通常是指情绪商数,简称EQ,主要是指人在情绪、意志、耐受挫折等方面的品质,其包括导商(Leading Quotient,即领导商数,简称LQ),它是指一个人领导、指导、引导、带领他人或团队组织的智慧和能力的商数)等。戈尔曼和其他研究者认为,情商由自我意识、控制情绪、自我激励、认知他人情绪和处理相互关系这五种特征组成。

一、基础

      在信息技术与数据管理领域,备份(英语:backup)指将文件系统或数据库系统中的数据加以复制,一旦发生灾难或错误操作时,可以方便而及时地恢复系统的有效数据和正常运作。最好将重要数据制作三个,或三个以上的备份,并且放置在不同的场所异地备援,以利日后回存之用。

  1. journal
          journal是MongoDB存储引擎层的概念,目前MongoDB主要支持mmapv1、wiredtiger、mongorocks等存储引擎都支持配置journal。和MySQL类似,MongoDB所有的数据写入、读取最终都是调用存储引擎(如WiredTiger、MMAPv1、In-Memory、Mongorocks等)的接口来实现,journal是存储引擎存储数据时的一种辅助机制,除In-Memory引擎外,其他引擎都已支持journal。

      以wiredtiger为例,如果不配置journal,写入wiredtiger的数据并不会立即持久化存储,而是每分钟会做一次全量的checkpoint(storage.syncPeriodSecs配置项,默认为1分钟)将所有的数据持久化。如果中间出现宕机,那么数据只能恢复到最近的一次checkpoint,这样最多可能丢掉1分钟的数据。所以建议「一定要开启journal」,开启journal后每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。这样即使出现宕机,启动时wiredtiger会先将数据恢复到最近的一次checkpoint的点,然后重放后续的journal操作日志来恢复数据。

      MongoDB里的journal行为主要由2个参数控制,storage.journal.enabled决定是否开启journal,storage.journal.commitInternal(单位ms)决定journal刷盘的间隔,默认为100,用户也可以通过写入时指定writeConcern{j: ture}来每次写入时都确保journal刷盘。

  1. oplog

      oplog在MongoDB里是一个特殊的固定集合(capped collection),它包含所有涉及数据修改事务的回滚记录,存储在local数据库中,它在达到最大值时自动覆盖最旧的条目。同时它也是MongoDB主从复制实现的关键,通过oplog来实现复制集节点间数据同步,客户端将数据写入到Primary,Primary写入数据后会记录一条oplog,Secondary从Primary(或其他Secondary)拉取oplog并重放,来确保复制集里每个节点存储相同的数据。

1
2
3
4
5
mongodb错误的update数据恢复

oplog可以恢复到任意时间点吗

db.oplog.rs.find({ns : "db.collection"})

二、使用

  1. 授权db.grantRolesToUser("user123",[{role:"dbAdmin",db:"admin"}])

  2. 备份mongodump

    • 所有库备份mongodump --out ~/Desktop/mongo
    • 指定库备份mongodump --db db_name --out ~/Desktop/mongo
    • 指定集合mongodump --db db_name --collection coll_name --out ~/Desktop/mongo
      • --db可简写为-d
      • --collections可简写为-c
      • --out可简写为-o
    • 删除数据库
      • show dbs
      • use study
      • db.dropDatabase()
  3. 还原mongorestore

    • 恢复整个库mongorestore ~/Desktop/mongo
    • 恢复指定库mongorestore --db user ~/Desktop/mongo/your_db
    • 恢复集合mongorestore -d db_name -c coll_name ~/Desktop/mongo
  4. 导出与导入(可具体到字段)

    • mongoexport -d study -c user -q '{"name":"张三"}' -f name,age --csv -o ~/Desktop/user.csv
    • mongoimport -d study -c user --upsert --upsertFields name,age --type csv ~/Desktop/user.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
①>>>>>mongodump -h 127.0.0.1 --port 27017 --authenticationDatabase admin -u username -p password -d mongo_test -c oplog.rs -o ~/restore-all

2021-09-20T00:54:28.869+0800 the collection mongo_test.oplog.rs appears to have been dropped after the dump started
2021-09-20T00:54:28.870+0800 writing mongo_test.oplog.rs to /your_path/restore/mongo_test/oplog.rs.bson
2021-09-20T00:54:28.871+0800 done dumping mongo_test.oplog.rs (0 documents)


②>>>>>mongorestore -h 127.0.0.1 --port 27017 --authenticationDatabase admin -u username -p password --dir ~/restore-all/

2021-09-20T01:00:29.319+0800 building a list of dbs and collections to restore from /your_path/restore-all dir
2021-09-20T01:00:29.322+0800 restoring mongo_test.oplog.rs from
2021-09-20T01:00:29.323+0800 no indexes to restore
2021-09-20T01:00:29.323+0800 finished restoring mongo_test.oplog.rs (0 documents)
2021-09-20T01:00:29.323+0800 done


③>>>>>mongorestore -h 127.0.0.1 --port 27017 --authenticationDatabase admin -u username -p password -d mongo_test -c ~/restore-all/oplog.rs.bson

2021-09-20T00:59:16.723+0800 building a list of dbs and collections to restore from /your_path/restore-all dir
2021-09-20T00:59:16.727+0800 restoring mongo_test.oplog.rs from
2021-09-20T00:59:16.727+0800 no indexes to restore
2021-09-20T00:59:16.727+0800 finished restoring mongo_test.oplog.rs (0 documents)
2021-09-20T00:59:16.727+0800 done


④>>>>>mongorestore -h 127.0.0.1 --port 27017 --authenticationDatabase admin -u username -p password -d mongo_test -c ~/restore-all/oplog.rs.bson
2021-09-20T00:59:28.305+0800 using default 'dump' directory
2021-09-20T00:59:28.305+0800 Failed: can't create ActualPath object from path dump: stat dump: no such file or directory

三、参考

  1. 参考一
  2. 参考二
  3. 参考三