【DBA课程-笔记】第 4 章:MongoDB数据库管理备份
目录
2. 设置备份目录(目录不存在自动创建,如果不选择数据库会备份所有(慎用))
3. 备份taobao数据库下的users集合,到bin/user目录
mongodump备份数据使用的文件格式MongoDB恢复数据库使用什么工具?
如何基于mongodump的备份文件恢复数据库?文件快照方式适用的场景?
说明:
课程中的数据库没有设置账号密码,生产中备份和恢复均需要密码验证如
# 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面试题
-
MongoDB备份常见方式?
-
mongodump备份数据使用的文件格式MongoDB恢复数据库使用什么工具?
-
mongodump备份数据的过程如何备份正在运行的数据库?
-
如何基于mongodump的备份文件恢复数据库?文件快照方式适用的场景?
-
MongoDB导入工具是什么?