zoukankan      html  css  js  c++  java
  • mongodb备份与恢复

    数据定期备份是非常有必要的,数据的重要性不言而喻,地球上的猪都会知道。
    mongodb备份方式有三种,下面分别说到:
    1. 文件快照方式
    2. 复制数据文件方式
    3. 使用mongodump方式

    一. 备份单台mongodb


    1. 文件快照方式


    这是最简单的备份方法。但是,需要系统文件支持快照和mongod必须启用journal。如果都符合这两条要求,可以在任何时刻创建快照。

    恢复时,确保没有运行mongod,执行快照恢复操作命令,然后启动mongod进程,mongod将重放journal日志。

    2. 复制数据文件方式


    直接拷贝数据目录下的一切文件。但是在拷贝过程中必须阻止数据文件发生更改。因此需要对数据库加锁,以防止数据写入。

    上面的命令将阻塞写入操作,并将脏数据刷新到磁盘上,确保数据一致。
    然后,拷贝数据文件到备份目录下

    文件复制完成后,对数据库进行解锁,允许写操作

    注意: 在执行db.fsyncLock()和db.fsyncUnlock()时,不能关闭当前的shell窗口,否则可能无法连接而需要重新启动mongod服务。

    恢复时,确保mongod没有运行,清空数据目录,将备份的数据拷贝到数据目录下,然后启动mongod

    3. 使用mongodump方式


    千万不要fsyncLock与mongodump配合使用,如果数据库被锁定了,mongodump将永远挂起。
    使用mongodump备份比较慢,在备份复制集时还有些问题,后续会说到。但是,用来备份单个数据库、集合、子集合还是比较好的方法。

    将在当前目录下创建dump目录,备份所有的数据库,所有的数据存储在.bson文件中,可以使用mongodb提供的bsondump工具来检索它。
    mongod未运行情况下:

    恢复时,使用mongorestore工具恢复

    恢复整个数据库:

    恢复到特定的库和集合:

    注意: mongodump和mongorestore版本最好相匹配。

    二. 备份复制集
    通常情况下,在secondary进行备份,降低primary负载,只在secondary上锁定,以免影响业务(假设没有发送读请求到secondary)。 可以使用上面的任意方式进行备份,不过推荐使用文件快照方式和复制数据文件方式。
    使用mongodump备份,上面提到了一个问题,那就是在mongodump备份过程中,发生写操作。在复制集架构环境下,要避免这种情况发生,mongodump需要加上--oplog参数,来跟踪备份时服务器上发生的所有操作,获取一个pointin-time快照,否则备份的状态将与集群中其他节点不匹配。在恢复时,还必须创建oplog,并指定--oplogReplay参数来应用这些操作,否则恢复的成员将不知道从何处开始同步,从而在某个时间点上与源服务器保持一致。

    在备份复制集时,可以设置mongodump连接"setName/s1,s2,s3", 它会自动选择一个可用的secondary进行备份。

    备份复制集:

    恢复复制集步骤:
    1. 将复制集中要恢复的成员移除集群
    2. 运行mongorestore --oplogReplay命令

    3. 创建oplog

    4. 恢复oplog

    注意:oplog.bson不位于dump/local/oplog.rs.bson, oplog.bson记录mongodump过程中发生的操作。
    5. 将该节点添加到复制集集群中

    复制集的相关操作参见 http://www.ttlsa.com/html/1679.html

    三. 备份分片
    在分片集群下,不可能在一个时间点上得到一个完整集群状态的快照。当集群越来越大时,从备份恢复整个架构的几率越来越小的。 因此,对于分片集群的备份,只需独自备份config server和复制集。
    在对分片集群进行备份与恢复操作前,要关闭balancer。

    对于比较小的分片集群,可以直接从mongos来备份与恢复。

    在大多数情况下,我们只需要恢复集群中的某个节点。 如果需要恢复整个集群,那你够倒霉的了,整个集群数据丢失可能性比较小的。备份时,直接连接分片集群的mongod而不是通过mongos。

    对于比较小型的分片集群,可以直接通过mongodump连接到mongos进行备份,备份的文件将包含config服务器的元数据信息和实际数据。

    对于大型的分片集群,备份步骤如下:

    1. 关闭balancer。注意:连接到mongos而不是config server实例。

    2. 备份集群元数据。使用mongodump备份任意一台config server。
    可以直接连接任意一台的config mongod实例,也可以通过mongos连接。

    3. 备份shard集群内各个replica set。可并行执行。
    4. 启用balancer。注意:连接到mongos而不是config server实例。

    下篇《mongodb备份与恢复(下)》将提供一个线上的备份脚本(适用于mongodb任何架构)以及增量备份的实现方法。

  • 相关阅读:
    django框架进阶ModelForm组件长期维护
    crm项目stark组件
    前端html长期维护
    django框架进阶AJAX长期维护
    22python语法基础基础赋值与深浅拷贝
    django框架基础路由系统长期维护
    django框架基础ORM单表操作长期维护
    24python语法基础基础控制语句
    django框架基础ORM基础长期维护
    django框架基础ORM进阶长期维护
  • 原文地址:https://www.cnblogs.com/igoodful/p/13937245.html
Copyright © 2011-2022 走看看