【DBA课程-笔记】第 4 章:MongoDB数据库管理备份

目录

一、MongoDB备份机制

1. MongoDB备份方式

2. MongoDB的备份考量

A. 要点:

3. MongoDB 备份方式对比

4. mongodump 备份工具

5. mongodump 备份机制

6. MongoDB 备份工具实战

A. 要点:

B. 备份命令

C. MongoDB备份原则

D. 基于Linux的LVM备份机制

E. 快照备份机制Snapshots

F. Linux系统创建快照 (适应于大数据场景)

H. windows 下实战

0.【暴力方式】复制 data目录

 1. 链接本地数据库,并备份(慎用)

2. 设置备份目录(目录不存在自动创建,如果不选择数据库会备份所有(慎用))

3. 备份taobao数据库下的users集合,到bin/user目录

4. 过滤集合的一部分数据(这里是年龄=18的文档)

5. 链接远程数据库

二、数据库的恢复

A. 基于快照文件的恢复

B. 基于Dump备份文件

1. 演示

Stage 1:删除数据库

Stage 2:恢复数据库 mongorestore

C. 直接复制data文件夹备份(数据量比较大的场景)

三、数据库的导出 (适用于小数据量,且数据结构支持不全)

A. 演示

1. mongoexport 导出帮助

2. 导出指定数据库的集合(必须指定集合否则报错)

四、数据库的导入

 A. 演示

1. mongoimport 导入帮助

2. 导入指定数据库的集合(必须指定集合否则报错)

五、MongoDB面试题

MongoDB备份常见方式?

mongodump备份数据使用的文件格式MongoDB恢复数据库使用什么工具?

mongodump备份数据的过程如何备份正在运行的数据库?

如何基于mongodump的备份文件恢复数据库?文件快照方式适用的场景?

MongoDB导入工具是什么?


说明:

        课程中的数据库没有设置账号密码,生产中备份和恢复均需要密码验证如

# Stage 1:备份远程数据库中的设备数据备份到本地
mongodump --host XXX.XXX.XXX.XXX --port 27017 --username root --password "XXXXXX" --collection 16091989 --db xph --out /backup/20230720 --query '{"dataTime":{ "$gt":"2023-07-14 00:00:00"}}'

# Stage 2:数据恢复
mongorestore --authenticationDatabase admin --username root --password "XXXXXX" --dir=/backup/20230720

一、MongoDB备份机制

1. MongoDB备份方式

  • 磁盘阵列 (最原始,需要特殊设置)
  • 文件系统快照 Filesystem Snapshots(需要特殊设置)
  • 复制数据文件 CP (常用,有些文件不可复制:如系统占用的文件)
  • 【推荐】mongodump 备份 和 mongorestore 恢复工具
  • 【推荐】mongoimport 导入 和 mongoexport 导出工具
  • MongoDB Atlas 云计算平台
  • MongoDB Cloud Manager (MongoDB Cloud提供的备份机制)
  • Ops Manager 企业版收费
  • 第三方工具
  • 【推荐】阿里云提供的备份工具

2. MongoDB的备份考量

A. 要点:

  • 备份:需要读写,对系统性能产生影响,需要评估(冷热备份)
  • 复杂度:集群中的备份
  • 增量备份:(差异化备份)

3. MongoDB 备份方式对比

4. mongodump 备份工具

  • mongodump 是官方标配的简单数据备份工具
  • mongodump 创建的是二进制BSON备份数据(BSON
  • mongodump 可以从mongod或mongos实例导出二进制数据
  • mongodump 可用于转储整个数据库,集合或查询结果
  • mongodump 可以备份正在写入的数据库,附带备份oplog数据
  • mongodump 适用于小型数据库备份如小于10G的数据),不适合大型系统
  • mongodump 备份机制不是增量方法
  • mongodump 是资源密集型的,对系统性能会产生影响

生产环境:用主-从模式,在从服务器上进行备份

5. mongodump 备份机制

  • mongodump 创建BSON备份文件mongorestore工具恢复数据库
  • mongodump 和 mongorestore 针对正在运行的mongod
  • mongodump 也可以直接操作底层数据文件
  • 默认情况下,mongodump不捕获local数据库的内容
  • 为了节省空间,备份不包括索Index信息恢复数据库要重建索引
  • 备份时,mongodump会对mongod性能产生影响
  • 对于副本集(主从复制集群),mongodump提供了--oplog选项,记录备份中更新数据操作,包含oplog条目中
  • mongorestore 可以重放捕获的oplog
  • 要恢复--oplog的备份,请使用带有--oplogReplay选项 (重放选项)

6. MongoDB 备份工具实战

A. 要点:

  • 远程备份:数据大(几百G),网络带宽问题
  • 远程备份:网络不稳定中断问题
  • 增量备份:(差异化备份)

B. 备份命令

  • 默认数据库备份目录:bin/dump

C. MongoDB备份原则

  • 标记文件,以便可以识别备份的内容以及备份反映的时间点
  • 如果mongodump和mongorestore的性能影响太大,请使用其他备份策略,例如Filesystem Snapshots或MongoDB Cloud Manager. (单节点推荐用文件快照)
  • 使用--oplog参数在mongodump备份期间捕获传入的写操作,以确保备份反映一致的数据状态。
  • 测试备份MongoDB部署,确保备份可用

D. 基于Linux的LVM备份机制

  • MongoDB可以使用Linux系统级别的工具来实现基于文件快照的备份
  • Logical volume manager逻辑卷管理器
  • 文件快照或“block-level”备份方法使用系统级工具来创建包含MongoDB数据文件设备的拷贝。
  • 这种方法快速、可靠,但需要额外的系统配置
  • 3.2版本更改:当MongoDB数据文件和日志文件驻留在不同的卷上时,对使用WiredTiger存储引擎的数据库提供卷级备份支持,但是要创建一致备份必须锁定数据库,并且备份过程中暂停所有写入。
  • 3.2之前的版本,数据文件和日志文件必须驻留相同的卷上

E. 快照备份机制Snapshots

  • 快照,数据文件的某个时刻的备份复制品
  • 快照完整保存数据库某个时间点的所有数据
  • 快照通过在实时数据和特殊快照卷之间创建指针来关联数据。
  • 这些指针在理论上等同于“硬链接”
  • 由于实时运行的数据与快照不同,快照过程使用写时复制策略。 因此,快照仅存储已修改的数据。
  • 对于WiredTiger存储引擎,数据文件反映了上一个检查点的一致状态。检查点每2GB数据或每分钟发生一次。

F. Linux系统创建快照 (适应于大数据场景)

  • 创建LVM使用以下命令
lvcreate --size 100M --snapshot --name mdb-snap01 /dev/vg0/mongodb

注意:确保磁盘空间充足,否则创建失败,快照文件必须重新创建

  • 直接恢复数据库,不使用压缩文件格式
umount /dev/vg0/mdb-snap01

lvcreate --size 1G --name mdb-new vg0

dd if=/dev/vg0/mdb-snap01 of=/dev/vg0/mdb-new

mount /dev/vg0/mdb-new /srv/mongodb

H. windows 下实战

0.【暴力方式】复制 data目录
  • 其中data包含数据和日志文件

 1. 链接本地数据库,并备份(慎用
mongodump --host 127.0.0.1--port 27017

2. 设置备份目录(目录不存在自动创建,如果不选择数据库会备份所有(慎用))
mongodump --out /data/backup/

3. 备份taobao数据库下的users集合,到bin/user目录
mongodump --collection users --db taobao --out user

4. 过滤集合的一部分数据(这里是年龄=18的文档)
mongodump --collection users --db taobao --out user --query {age:18}

5. 链接远程数据库
mongodump --host aliyun.com --port 3017 --username root --password "pass123" --out dump-2018

二、数据库的恢复

A. 基于快照文件的恢复

B. 基于Dump备份文件

  • 使用工具:mongorestore
  • mongorestore --host aliyun.com --port 3017 dump-2018
  • mongorestore --oplogReplay 恢复带日志oplog的数据库
  • 注意:不会恢复索引,需要自己重建
  • 默认数据库使用备份目录恢复:bin/dump

1. 演示

Stage 1:删除数据库

Stage 2:恢复数据库 mongorestore
  • 这里是全量恢复,使用恢复目录bin/dump

C. 直接复制data文件夹备份(数据量比较大的场景

三、数据库的导出 (适用于小数据量,且数据易丢失)

  • mongoexport:导出工具
  • 把MongoDB数据库数据导出为JSON、CSV、TSV格式
  • 独立工具,直接在系统命令窗口启动system command line
  • 可以导出特定集合的数据:
  • mongoexport --db alibaba --collection users --out users.json

A. 演示

1. mongoexport 导出帮助

mongoexport --help

2. 导出指定数据库的集合(必须指定集合否则报错

  • 输出文件目录:bin/users.json
  • 将 alibaba 数据库中的 users 集合导出到 bin/users.json
mongoexport --db alibaba --collection users --out users.json
  •  将 alibaba 数据库中的 orders 集合导出到 bin/out2018.json
mongoexport --collection orders --db alibaba --out out2018.json

四、数据库的导入  (适用于小数据量,且数据易丢失)

  • mongoimport:导入工具
  • 从外部向MongoDB数据库数据导入格式为JSON、CSV、TSV的数据
  • 独立工具,直接在系统命令窗口中启动system command line
  • 可以导入特定集合的数据
  • mongoimport --db alibaba --collection users --file users.json

注意:

  • 避免使用mongoimport和mongoexport进行完整的实例备份
  • 数据丢失原因:不能确保所有BSON数据类型,因为JSON只能表示BSON类型子集

 A. 演示

1. mongoimport 导入帮助

mongoimport --help

2. 导入指定数据库的集合(必须指定集合否则报错

  • 文件目录:bin/out2018.json
  • bin/out2018.json 导入到 taobao 数据库中的 users2018 集合
mongoimport --collection users2018 --db taobao out2018.json

五、MongoDB面试题

  1. MongoDB备份常见方式?

  2. mongodump备份数据使用的文件格式MongoDB恢复数据库使用什么工具?

  3. mongodump备份数据的过程如何备份正在运行的数据库?

  4. 如何基于mongodump的备份文件恢复数据库?文件快照方式适用的场景?

  5. MongoDB导入工具是什么?

posted @ 2023-07-05 14:21  随风落木  阅读(2)  评论(0编辑  收藏  举报  来源