在日常运维过程中,数据备份及恢复也越来越重要,数据的备份保证了数据的安全性,在数据丢失或者误删除的情况下可以让我们快速的恢复,尽可能做到不丢失或者少丢失数据。
mongodump 仅备份数据库中的文档,不备份索引,所以还原后,需要重新生成索引。
mongodump --host 127.0.0.1 --port 27017 -u root -p 123456 --authenticationDatabase admin --gzip --out data/backup/mongodump
mongodump --host 127.0.0.1 --port 27017 -u root -p 123456 --authenticationDatabase admin -c trackEvent20230902 --gzip --out /data/backup/ trackEvent20230902
--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
mongorestore --host 127.0.0.1 –por27017 -u root -p 123456 --authenticationDatabase admin /data/backup/mongodump
mongorestore --host 127.0.0.1 –por27017 -u root -p 123456 --authenticationDatabase admin -d qkn /data/backup/ trackEvent20230902/qkn/trackEvent20230902.bson.gz
--help # 查看帮助 --quiet # 通过抑制 MongoDB的复制,连接等活动,来实现数据恢复 --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 namespace options: -d, --db= 从BSON文件恢复时指定的数据库 -c, --collection= 从BSON文件恢复的集合 --excludeCollection= 过时的参数.在恢复期间跳过的集合(可以多次指定以排除其他集合). --excludeCollectionsWithPrefix= 过时的参数.在恢复期间跳过具有给定前缀的集合(可以多次指定以排除其他前缀). --nsExclude= 排除匹配的命名空间 --nsInclude= 包括匹配的命名空间 --nsFrom= 重命名匹配的命名空间,必须具有匹配的nsTo --nsTo= 重命名匹配的命名空间,必须具有匹配的nsFrom input options: --objcheck 插入前验证所有对象 --oplogReplay 重放oplog以进行时间点恢复 --oplogLimit=[:ordinal] 仅在提供的时间戳之前包含oplog条目 --oplogFile= 用于重放oplog的oplog文件 --archive= 从指定的归档文件恢复转储;若指定了flag而没有值,则从stdin读取归档文件 --restoreDbUsersAndRoles 恢复给定数据库的用户和角色定义 --dir= 输入目录,对stdin使用' - ' --gzip 解压缩gzip压缩输入 restore options: --drop 在导入之前删除每个集合 --dryRun 查看摘要而不导入任何内容 建议详细说明 --writeConcern= 写关注选项比如 --writeConcern majority, --writeConcern '{w: 3, wtimeout: 500, fsync: true, j: true}' --noIndexRestore 不要恢复索引 --noOptionsRestore 不恢复收集选项 --keepIndexVersion 不要更新索引版本 --maintainInsertionOrder 在恢复期间保留文件的顺序 -j, --numParallelCollections= 要并行恢复的集合数默认为4 --numInsertionWorkersPerCollection= 每个集合并发运行的插入操作数(默认为1) --stopOnError 如果在插入时遇到错误则停止恢复(默认情况下关闭) --bypassDocumentValidation 绕过文档验证 --preserveUUID 保留原始集合UUID(默认情况下关闭,需要删除)
将文档写入指定的集合; 将写入操作记录到oplog; 如果oplog满了,删除最先写入的oplog。
use local
db.oplog.rs.stats().maxSize

rs.printReplicationInfo()


mongodump -h 127.0.0.1:7002 -u root -p 123456 --authenticationDatabase admin -d local -c oplog.rs -o /data/oplog
bsondump oplog.rs.bson >a.txt
cat a.txt |grep trackEvent20230902
{"ts":{"$timestamp":{"t":1693650095,"i":2}},"t":
{"$numberLong":"2"},"h":{"$numberLong":"0"},"v":
{"$numberInt":"2"},"op":"c","ns":"hsdb.$cmd","ui":
{"$binary":
{"base64":"fcsLkZ05SnyNPwKB6sg5BA==","subType":"04"}},"wall"
:{"$date":{"$numberLong":"1693650095962"}},"o":
{"create":"trackEvent20230902","idIndex":{"v":
{"$numberInt":"2"},"key":{"_id":
{"$numberInt":"1"}},"name":"_id_","ns":"hsdb.trackEvent20230902"}}}
ts:操作发生的时间,t: unix时间戳, i: 可以认为是同一时间内的第几个 h:记录的唯一ID v:版本信息 op:写操作的类型 n: no-op c: db cmd i: insert u: update d: delete ns:操作的namespace, 即:数据库.集合 o:操作所对应的文档 o2:更新时所对应的where条件,更新时才有
mongodump -h 127.0.0.1:7002 -u root -p 123456 --
authenticationDatabase admin -d local -c oplog.rs -q '{"ts":
{"$lte": {"$timestamp":{"t":1693650420,"i":1}}, "$gte":
{"$timestamp":{"t":1693650261,"i":1}}}}' -o /data/oplogv1
mongorestore -h 127.0.0.1:7002 -u root -p 123456 --
authenticationDatabase admin --oplogReplay --oplogLimit
"1693650420:1" /data/oplogv1/local/oplog.rs.bson



本文作者:白炀斌(上海新炬中北团队)
本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




