一、工具介绍
(1)mongoexport/mongoimport #导入/导出的是JSON格式或者CSV格式
(2)mongodump/mongorestore #导入/导出的是BSON格式
二、备份工具区别
(1)JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性。
(2)在一些mongodb版本之间,BSON格式可能会随版本不同而有所不同,所以不同版本之间用mongodump/mongorestore可能不会成功,具体要看版本之间的兼容性。当无法使用BSON进行跨版本的数据迁移的时候,使用JSON格式即mongoexport/mongoimport是一个可选项。跨版本的mongodump/mongorestore个人并不推荐,实在要做请先检查文档看两个版本是否兼容(大部分时候是的)。
(3)JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。使用时应该注意。
三、应用场景
mongoexport/mongoimport: json csv异构平台迁移 mysql mongodb
同平台,跨大版本:mongodb 2 ----> mongodb 3
mongodump/mongorestore:日常备份恢复使用
4.1、导出工具mongoexport
Mongodb中的mongoexport工具可以把一个collection导出成JSON格式(默认)或CSV格式的文件。
可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。适合如下场景:(1)版本差异较大
(2)异构平台数据迁移
4.1.1、具体参数说明
4.1.2、应用例子
创建测试数据:
1)单表备份至json格式
操作过程:
2)单表备份至csv格式
操作过程:
Mongodb中的mongoimport工具可以把一个特定格式文件中的内容导入到指定的collection中。该工具可以导入JSON格式数据,也可以导入CSV格式数据。
4.2.1、具体参数说明
4.2.2、应用例子
1)恢复json格式表数据到log1
操作过程:
2)
恢复csv格式的文件到log2
导入CSV格式文件中的内容,则需要通过--type参数指定导入格式
①当csv格式的文件头行,有列名字
②当csv格式的文件头行,没有列名字 ==>手工添加列名
3)案例:mysql表导入mongodb
示例:mysql 的world数据库下city表进行导出,导入到mongodb
4)
mysql表批量导入mongodb脚本
5.1、介绍
mongodump能够在Mongodb运行时进行备份,它的工作原理是对运行的Mongodb做查询,然后将所有查到的文档写入磁盘。但是存在的问题时使用mongodump产生的备份不一定是数据库的实时快照,如果我们在备份时对数据库进行了写入操作,则备份出来的文件可能不完全和Mongodb实时数据相等。另外在备份时可能会对其它客户端性能产生不利的影响。
5.3、
mongodump和mongorestore基本使用
5.3.1、全库备份
5.3.2、备份world库
5.3.3、备份world库下的city集合
5.3.4、压缩备份
5.3.5、
恢复world库
5.3.6、恢复world库下的city集合
5.3.7、--drop表示恢复的时候把之前的集合drop掉(危险)
六、Oplog
注意:这是replica set或者master/slave模式专用
--oplog:use oplog for taking a point-in-time snapshot
6.1、oplog介绍
1)在replica set中oplog是一个定容集合(capped collection),它的默认大小是磁盘空间的5%(可以通过--oplogSizeMB参数修改),位于local库的db.oplog.rs。
2)其中记录的是整个mongod实例一段时间内数据库的所有变更(插入/更新/删除)操作。
3)当空间用完时新记录自动覆盖最老的记录。#最好按全备的一个周期来设置
4)其覆盖范围被称作oplog时间窗口。需要注意的是,因为oplog是一个定容集合,所以时间窗口能覆盖的范围会因为你单位时间内的更新次数不同而变化。
6.2、oplog查看
查看oplog窗口预计覆盖时间:
6.3、oplog应用
实现热备,在备份时使用--oplog选项
1)准备测试数据
2)
oplog 配合mongodump实现热备
3)恢复
4)查看
6.4、oplog案例
6.4.1、背景
每天0点全备,oplog恢复窗口为48小时
某天,上午10点world.city 业务表被误删除
6.4.2、恢复思路
1、停应用
2、找测试库
3、恢复昨天晚上全备
4、截取全备之后到world.city误删除时间点的oplog,并恢复到测试库
5、将误删除表导出,恢复到生产库
6.4.3、恢复步骤
1)模拟故障环境
2)模拟10点误删除表city
3)备份现有的oplog.rs表
4)登录原数据库,截取oplog到drop之前的位置
5)恢复备份,应用oplog
6)查看备份的数据