热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DBAMongoDB备份恢复

功能概述​mongodump能够在Mongodb运行时进行备份,它的工作原理是对运行的Mongodb做查询,然后将所有查到的文档写入磁盘。​但是存在的问题是使用mongodump产

功能概述

​ mongodump能够在Mongodb运行时进行备份,它的工作原理是对运行的Mongodb做查询,然后将所有查到的文档写入磁盘。

​ 但是存在的问题是使用mongodump产生的备份不一定是数据库的实时快照,如果我们在备份时对数据库进行了写入操作,则备份出来的文件可能不完全和Mongodb实时数据相等,必须配合oplog才能达到热备份的效果。

​ 另外在备份时可能会对其它客户端性能产生不利的影响。

​ 命令行中执行:

T > mongodump --help

​ 参数说明:

参数 描述
-h 指明数据库宿主机的IP
-u 指明数据库的用户名
-p 指明数据库的密码
-d 指明数据库的名字
-c 指明collection的名字
-o 指明到要导出的文件名
-q 指明导出数据的过滤条件
-j 并行备份多个集合,默认4个
--port 端口号
--uri 使用链接字符串进行链接
--authenticationDatabase 验证库
--oplog 备份的同时备份oplog
--gzip 压缩备份

​ 备份的用户应该是管理员用户。

全库备份

​ 需要注意的是在进行全备时,必须关闭节点才能复制,否则复制的文件无效。

​ 所以推荐在从节点上做备份。

​ 也可以选择db.fsyncLock()进行节点锁定,在备份完成后不要忘记db.fsyncUnlock()进行解锁(不推荐)。

​ 命令如下:

T > mongodump -uroot -p密码 --port 27018 --authenticationDatabase admin -o /mongodb/backup/ --oplog

单库备份

​ 命令如下:

T > mongodump -uroot -p密码 --port 27018 --authenticationDatabase admin -d 库名 -o /mongodb/backup/ --oplog

单表备份

​ 备份某个库下的某个集合:

T > mongodump -uroot -p密码 --port 27018 --authenticationDatabase admin -d 库名 -c 集合名 -o /mongodb/backup/ --oplog

压缩备份

​ 命令如下,以全库示例:

T > mongodump -uroot -p密码 --port 27018 --authenticationDatabase admin -o /mongodb/backup --gzip --oplog

备份目录

​ 在备份完成后会获得以下的目录:

|- backup
|---- admin
|-------- system.version
|-------- system.version
|---- oplog.bson               # oplog
|---- 库名
|-------- 集合名.bson           # 备份的数据文件
|-------- 集合名.metadata.json  # 集合元数据

mongorestore

功能概述

​ 用于恢复由mongodump备份的文件。

​ 命令行中执行:

T > mongorestore --help

​ 参数说明:

参数 描述
-h 指明数据库宿主机的IP
-u 指明数据库的用户名
-p 指明数据库的密码
-d 指明数据库的名字
-c 指明collection的名字
-j 并行恢复多个集合,默认4个
--port 端口号
--uri 使用链接字符串进行链接
--authenticationDatabase 验证库
--drop 在恢复时先执行删除命令(慎用)
--gzip 恢复压缩备份
--oplogFile 指定需要恢复的oplog文件位置
--oplogLimit 恢复记录至某一时间点
--oplogReplay 恢复时也随着恢复oplog

恢复全库

​ 命令如下:

T > mongorestore -uroot -p密码 --port 27018 --authenticationDatabase admin --oplogReplay /mongodb/backup/

恢复单库

​ 命令如下:

T > mongorestore -uroot -p密码 --port 27018 --authenticationDatabase admin -d 库名 --oplogReplay /mongodb/backup/库名 

恢复单表

​ 命令如下:

T > mongorestore -uroot -p密码 --port 27018 --authenticationDatabase admin -d 库名 -c 表名 --oplogReplay /mongodb/backup/库名/表名.bson

恢复压缩

​ 命令如下,恢复全库压缩:

T > mongorestore -uroot -p密码 --port 27018 --authenticationDatabase admin --oplogReplay /mongodb/backup --gzip

oplog

基本介绍

​ oplog仅用于复制集中,是一个定容集合,位于local库的db.oplog.rs中,其大小默认为磁盘空间的5%。

​ 其中记录的是整个MongoDB实例一段时间内数据库的所有变更(插入/更新/删除)操作,当空间用完时新记录自动覆盖最老的记录。

​ 由于oplog是一个定容集合,里面的内容会进行迭代更新,那么一组oplog的最大存活时长被称为窗口期。

​ 想要查看当前的oplog时间窗口预计存活时间,可以使用以下命令:

rs0:PRIMARY> use local
rs0:PRIMARY> rs.printReplicationInfo()
configured oplog size:   2048MB  # 集合大小
log length start to end: 944secs (0.26hrs)  # 预计窗口覆盖时间
oplog first event time:  Fri Mar 19 2021 23:14:47 GMT-0700 (PDT)  # 第一个时间点
oplog last event time:   Fri Mar 19 2021 23:30:31 GMT-0700 (PDT)  # 最后一个时间点
now:                     Fri Mar 19 2021 23:30:37 GMT-0700 (PDT)  # 最新的时间点(跟随当前时间不短变化)

​ 查看oplog相关信息:

rs0:PRIMARY> db.oplog.rs.find().pretty()

​ 信息如下,仅截取一条:

{
	"ts" : Timestamp(1616220887, 1),
	"h" : NumberLong(0),
	"v" : 2,
	"op" : "n",
	"ns" : "",
	"wall" : ISODate("2021-03-20T06:14:47.449Z"),
	"o" : {
		"msg" : "initiating set"
	}
}

恢复某一时间点

​ 背景:每天0点全备,oplog恢复窗口为48小时

​ 某天,上午10点world.city 业务表被误删除

​ 恢复思路:

  1. 停应用挂维护页
  2. 找测试库
  3. 恢复昨晚全备
  4. 截取全备之后到world.city误删除时间点的oplog,并恢复到测试库
  5. 将误删除表导出,恢复到生产库

​ 先全备数据库,首先模拟原始数据,在主库上插入:

mongo --port 27017

use world

for(var i = 1 ;i <20; i++) {
    db.ci.insert({a: i});
}

​ 全备,从从库上备份(非延迟):

rm -rf /mongodb/backup/*
mongodump --port 27018 --oplog -o /mongodb/backup

​ 再次模拟数据,主库插入:

db.ci1.insert({id:1})
db.ci2.insert({id:2})

​ 上午10点,误删除world库下的ci表,主库删除:

db.ci.drop()

​ 备份现有的中oplog.rs表,从从库备份:

mongodump --port 27018 -d local -c oplog.rs  -o /mongodb/backup

​ 截取oplog并恢复到drop()之前的位置,先登录原数据库:

mongo --port 27017

use local
db.oplog.rs.find({op:"c"}).pretty();

{
    "ts" : Timestamp(1553659908, 1),  # oplog误删除时间点位置
    "t" : NumberLong(2),
    "h" : NumberLong("-7439981700218302504"),
    "v" : 2,
    "op" : "c",
    "ns" : "wo.$cmd",
    "ui" : UUID("db70fa45-edde-4945-ade3-747224745725"),
    "wall" : ISODate("2019-03-27T04:11:48.890Z"),
    "o" : {   # 找操作
        "drop" : "ci"
    }
}

​ 恢复备份+oplog

cd /mongodb/backup/local/
cp oplog.rs.bson ../oplog.bson 
rm -rf /mongodb/backup/local/

# 先在本地测试库进行恢复
mongorestore --port 28017  --oplogReplay --oplogLimit "1553659908:1"  --drop   /mongodb/backup/

​ 如果恢复成功,导出测试库的全备,再恢复到线上主库。


推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • linuxmint20.3 安装anaconda、换源及创建新环境
    本文用来记录linuxmint20.3安装anaconda、换源及创建新环境的过程,同时记录一些相关命令目录anaconda安装相关命令创建新环境显示问题 ... [详细]
  • 初始化_SQL Server 2017 AlwaysOn AG 自动初始化
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了SQLServer2017AlwaysOnAG自动初始化相关的知识,希望对你有一定的参考价值。 ... [详细]
  • q3.whichstatementistrueregardingexternaltablesa.thedefaultrejectlimitforext ... [详细]
  • 使用R包提供的数据是学习数据科学工具的好方法,但是在某个时候,您希望停止学习,开始使用自己的数据。在本章中,您将学习如何将纯文本矩形文件读入r。在这里,我们只讨论数据导入的皮毛,但 ... [详细]
  • WPF菜鸟谈之依赖属性,附加属性(附加《深入浅出WPF》pdf下载)
    我们都知道.NET中有属性(Property)这个概念。在MSDN中是这样定义属性的:属性是这样的成员:它们提供灵活的机制来读取、编写或计算私有字段的值。可以像使用公共数据成员一样 ... [详细]
  • 一条数据的漫游 XEngine SIGMOD Paper Introduction
    大多数人追寻永恒的家园(归宿),少数人追寻永恒的航向。----瓦尔特.本雅明背景X-Engine是阿里数据库产品事业部自研的OLTP数据库存储引擎, ... [详细]
  • yumyum其实相当于是对rpm格式的软件包进行管理,yum仓库中有一个数据库,通过该数据库可以解决软件包安装的依赖关系,显示当前yum仓 ... [详细]
  • 主存同步mysql_MySQL阶段五——主从复制原理、主从延迟原理与解决
    MySQL主从复制原理、主从延迟原理与解决MySQL主从复制画图描述:MySQL主从复制原理上图详解:①用户做crud操作,写入数据库&# ... [详细]
  • 我上个月有幸参加了在西雅图召开的PASS(ProfessionalAssociationforSQLServer)峰会。我的同事MattMasson做了 ... [详细]
author-avatar
傻丫头苏婵_596
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有