mongodump 备份oplog
https://www.cnblogs.com/easydb/p/14286810.html
https://www.modb.pro/db/152396
https://cloud.tencent.com/developer/article/1429385
https://blog.csdn.net/weixin_39534978/article/details/112017109
https://www.cnblogs.com/oldSimon/p/16290813.html
https://blog.huati365.com/18a033a577f830e3
简介:
mongodump能够在Mongodb运行时进行备份,它的工作原理是对运行的Mongodb做查询,然后将所有查到的文档写入磁盘。
但是存在的问题时使用mongodump产生的备份不一定是数据库的实时快照,如果我们在备份时对数据库进行了写入操作,
则备份出来的文件可能不完全和Mongodb实时数据相等。另外在备份时可能会对其它客户端性能产生不利的影响。
mongodump 是 MongoDB 官方提供的备份工具,它可以从 MongoDB 数据库读取数据,并生成 BSON 文件,mongodump 适合用于备份和恢复数据量较小的 MongoDB 数据库,不适用于大数据量备份。
mongodump和mongorestore是针对mongodb数据库的备份方式。
mongodump/mongorestore备份和恢复的是BSON格式。
JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性。
bosn可以使用bsondump来查看。
注意事项:
1.在一些mongodb版本之间,BSON格式可能会随版本不同而有所不同,所以不同版本之间用mongodump/mongorestore可能不会成功,具体要看版本之间的兼容性。
2.当无法使用BSON进行跨版本的数据迁移的时候,使用JSON格式即mongoexport/mongoimport是一个可选项。
3.跨版本的mongodump/mongorestore个人并不推荐,实在要做请先检查文档看两个版本是否兼容。
4.JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。使用时应该注意。
全量备份:
# 可对单节点和副本集的mongo做全量备份
1.备份可在RS副本集内任一节点执行,最好在从库
2.mongodump备份时不需要锁库,可以通过--oplog参数将备份时段的变更记录以日志形式一起备份出来(单实例不支持oplog)
3.mongodump全量备份会转储admin库下的users和version,所有的用户库和备份时段内的oplog,
4.转储格式为bson格式的数据文件和json格式的元数据文件
增量备份(oplog日志备份):
# 只有副本集可以增量备份,单实例没有oplog无法增备
根据全量备份时段备份的oplog,获取全量备份完成的时间戳。进行增量数据备份。
bsondump oplog.bson # 可以得出时间戳为(1593309601,1),后期可以通过脚本解析json直接获取
说明:
MongoDB中的时间戳为(timestamp,i)的形式,其中timestamp为十位时间戳,精确到秒,i表示累增序数,记录着该时间戳内有多少并发操作。
# 基于时间戳的增量备份
mongodump -u admin -p 123456 -h localhost --port 27017 --authenticationDatabase admin -d local -c oplog.rs \
--query '{ts:{$gt:Timestamp(1593309601,1)}}' -o /var/lib/mongobak/mongodump_oplog_`date +%Y-%m-%d_%H:%M:%S`
全量恢复
mongorestore恢复时,需要服务开启且停止业务写入,防止数据恢复时写入导致数据错乱
同机(副本集)全量恢复
同副本集的恢复,需要指定主库ip,在primary主库上做恢复,通过oplog同步给从库
mongorestore -h 192.168.73.120 --port 27018 -u admin -p 123456 --authenticationDatabase admin --oplogReplay --dir /var/lib/mongobak/mongodump_2020-06-28
# mongorestore只针对insert做恢复,不会恢复update。对于同一个_id的文档,mongorestore会认定为重复并跳过。可以使用--drop,在import前先删除collection
创建备份和恢复用户
# 创建备份用户
use admin # 选择认证库
db.createUser(
{
user: "backup",
pwd: "backup",
roles: [
{
role: "read",
db: "local" # 需要备份的数据库
},{
role: "backup", # 拥有备份权限
db: "admin" # 认证库
},
{
role: "restore", # 拥有恢复权限
db: "admin" # 认证库
}
]
}
)
# 验证用户
db.auth('backup','backup')
# 创建恢复用户
use admin # 选择认证库
db.createUser(
{
user: "restore",
pwd: "restore",
roles: [ { role: "restore", db: "admin" } ]
}
)
# 验证用户
db.auth('restore','restore')
mongodump参数列表
--host <hostname><:port>, -h <hostname><:port> # 指定备份的主机ip和端口号,默认值localhost:27017
--port # 指定端口号 默认27017
--username <username>, -u <username> # 指定用户名
--password <password>, -p <password> # 指定密码
--authenticationDatabase <dbname> # 指定认证的数据库
--authenticationMechanism <name> # 指定认证的算法 ,默认值 SCRAM-SHA-1
--db <database>, -d <database> # 指定备份的数据库,未指定的话,备份所有的数据库,但不包含local库
--collection <collection>, -c <collection> # 指定备份的集合,未指定则备份指定库中的所有集合。
--query <json>, -q <json> # 指定 json 作为查询条件。来备份我们过滤后的数据。
--queryFile <path> # 指定 json 文档路径,以该文档的内容作为查询条件,来备份我们过滤后的数据。
--quit # 通过抑制 MongoDB的复制,连接等活动,来实现备份。
--gzip # 开启压缩,3.2版本后可以使用,输出为文件的话会带有后缀.gz
--out <path>, -o <path> # 输出的目录路径
--repir # 修复数据时使用 下面有详细介绍
--oplog # mongodump 会将 mongodump 执行期间的 oplog 日志 输出到文件 oplog.bson,这就意味着从备份开始到备份结束的数据操作我们都可以记录下来。
--archive <file> # 输出到单个存档文件或者是直接输出。
--dumpDbUsersAndRoles # 只有在 使用 --db 时才适用,备份数据库的包含的用户和角色。
--excludeCollection string # 排除指定的集合,如果要排除多个,使用多个--excludeCollection
--numParallelCollections int, -j int # 并行导出的集合数,默认为4
--ssl # 指定 TLS/SSL 协议
--sslCAFile filename # 指定认证文件名
--sslPEMKeyFile <filename>
--sslPEMKeyPassword <value>
--sslCRLFile <filename>
--sslAllowInvalidCertificates
--sslAllowInvalidHostnames
--sslFIPSMode
--oplog:# 重点参数,在导出的同时生成一个oplog.bson文件,存放开始dump和结束dump期间的所有oplog,注意--oplog只对全库导出有效。
mongodump备份语句
# 全库备份
mongodump -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p c123456 -o /mongodb/backup/full
# 备份simon库
mongodump -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p c123456 -d simon -o /mongodb/backup/simon
mongodump -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p c123456 -d local -o /mongodb/backup/local
# 备份指定集合t1
mongodump -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p c123456 -d czg -c t1 -o /root/mongo_dump/
# 备份admin888库下面的kobe表
mongodump -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p c123456 -d admin888 -c kobe -o /backup/27017_admin888_kobe
# 备份所有数据库和oplog
mongodump -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p c123456 --oplog -o /mongodb/backup/full
# 备份指定数据库和库中的用户角色信息
mongodump -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p c123456 -d czg --dumpDbUsersAndRoles -o /root/mongo_dump/
# 备份admin888库下面的kobe表,并压缩。 # 可以压缩库,也可以压缩表
mongodump -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p c123456 -d admin888 -c kobe -o /backup/27017_admin888_kobe --gzip
# 远程数据库备份到本地,通过管道符还原
mongodump --host ipAdress --port 27017 --username user--password "pass" --archive | mongorestore --archive
mongorestore恢复语句
# eg:
mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径
# –drop参数:先删除所有的记录,然后恢复。只能删除备份文件里面有的集合,恢复库中的集合不在导入文件中的话,是不会被删除的
# 从全备中恢复指定的库:恢复abc库到bcd
mongorestore -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p c123456 -d bcd /data/mongodb/backup/abc --gzip # 恢复指定的库,需要指定的具体文件
# 从全备中恢复指定的集合/表:恢复simon库下的city2集合
mongorestore -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p c123456 -d world -c t1 /mongodb/backup/full-gzip/simon/city2.bson.gz --gzip # 恢复指定的集合,需要指定具体的集合文件
# 还原所有数据库到mongodb中
mongorestore /home/mgtc/mongodb/ #这里的路径是所有库的备份路径
# 还原指定的数据库
mongorestore -d wooyun /home/mgtc/mongodb/wooyun/
# 恢复所有数据到数据库
mongorestore -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p c123456 /root/mongo_dump
# 恢复所有数据到数据库,并应用oplog
mongorestore -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p c123456 --oplogReplay /root/mongo_dump
# 恢复单表数据到数据库
mongorestore -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p c123456 /root/mongo_dump/czg/t2.bson
# 恢复单表数据到指定数据库 czg_new
mongorestore -h 127.0.0.1:27017 --authenticationDatabase=admin -u root -p c123456 -d czg_new /root/mongo_dump/czg/t2.bson
# 通过全备,全部恢复,也就是将存在的数据库和数据表都删除,在恢复
mongorestore -h 192.168.79.128:27020 --drop /backup/27020full/
# 恢复kobe库
mongorestore -h 192.168.79.128:27020 -d kobe /backup/27020full/
# 恢复kobe库下的mycol集合
mongorestore -h 192.168.79.128:27020 -d kobe -c mycol --drop /backup/27020full/kobe/mycol.gz
# 恢复单库
mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test --drop /home/mongod/backup/test/
# 恢复单表
mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test -c vast --drop /home/mongod/backup/test/vast.bson
# 还原指定数据库的指定集合
# 写法1
mongorestore --collection collection --db database filePath
# 写法2(推荐写法)
mongorestore --nsInclude database.collections filePath
# 写法1的filePath是json,bson文件所在的目录,一般为"./dump/database",写法2的filePath是数据库备份的根目录,一般为 "./dump"
# 还原归档文件
mongorestore --archive=filename --db database
1.默认情况下 mongodump 不获取 local 数据库里面的内容。
2.mongodump 仅备份数据库中的文档,不备份索引,所以我们还原后,需要重新生成索引。
3.mongodump 备份过程中会对 mongod 服务的性能产生影响,我们建议在业务低峰期进行操作。如果我们备份的数据,大于系统内存,我们备份的时候容易出现错误。
4.在执行 mongodump 的时候,mongod 服务还是可以提供服务的,可以进行修改数据,如果我们在备份的时候加上参数 --oplog 的话,那么 oplog 是会记录这一次操作的如果我们想在 restore 的时候也有日志记录,我们可以使用 mongorestore --oplogReplay 进行恢复
5.mongodump 默认输出的目录名为 dump ,如果输出路径包含 dump 目录,会直接覆盖的。 默认备份是没有压缩的。
6.mongodump全量备份副本集时会转储admin库下的users和version,所有的用户库和备份时段内的oplog。
7.转储格式为bson格式的数据文件和json格式的元数据文件
8.只有副本集可以增量备份,单实例没有oplog无法增备,根据全量备份时段备份的的oplog,获取全量备份完成的时间戳。
标签:mongo,--,mongorestore,mongodump,admin,oplog,备份 From: https://www.cnblogs.com/p0st/p/16739997.html