mogodb备份注意事项

MongoDB数据库的备份,恢复与迁移,回滚

备份与恢复

在创建MongoDB服务的时候,通过--dbpath指定目录就是存放mongdb数据库文件目录,我们可以通过复制这些文件实现数据库的冷备,但是这种方式不太安全。因此在冷备前,要关闭服务器,这个在第一节中介绍过平滑关闭server的命令。

 
 
  1. >use admin  
  2. >db.shutdownServer() 

或者可以通过fsync方式使MongoDB将数据写入缓存中,然后再复制备份

 
 
  1. >use admin  
  2. >db.runCommand({"fsync":1,"lock":1}) 

这个时候我往test.foo 插入了一条数据 f:6 ,在执行db.foo.find()后,并没有查到这条记录,说明记录没有直接写入数据库,而是被缓冲到缓存中了。

备份完后,要解锁(防止这个时候停电或其它原因,导致未缓存中的数据丢失)。

 
 
  1. >use admin  
  2. >db.$cmd.sys.unlock.findOne()  
  3. >db.currentOp()    如果currentOp 只返回{"inprog":[]}结果,说明解锁成功。 

解锁后,缓存中的数据会写入数据库文件中,我们去查询foo结果。

MongoDB数据库的备份与恢复详解

上面是冷备的方式,我们可以在不停止服务的情况下,使用MongoDB提供的两个工具来实现备份和恢复。这个两个工具在MongoDB的bin目录下可以看到:mongodump/mongorestor

mongodump备份的原理是通过一次查询获取当前服务器快照,并将快照写入磁盘中,因此这种方式保存的也不是实时的,因为在获取快照后,服务器还会有数据写入,为了保证备份的安全,同样我们还是可以利用fsync锁使服务器数据暂时写入缓存中。

mongodump备份命令:

 
 
  1. ......bin>./mongodump -d test -o backup            //( backup是备份目录,默认创建到bin目录) 
  2. ./mongodbdump --help 可查看命令的帮助

mongorestore恢复命令: 

可以在恢复前往foo表插入一条记录 g:7)

 
 
  1. .....bin>./mongorestore -d test --drop backup/test/ 
  2. 提一点的就是 drop选项,这里是说我将test数据恢复之前先删除原有数据库里面的数据

看一下运行结果:

MongoDB数据库的备份与恢复详解

以上就是mongodb的备份和恢复过程。当数据库文件出现问题或者损坏时,MongoDB还提供了修复数据文件的命令。

在启动mongod服务时通过--repair 修复:

 
 
  1. ....bin>./mongod --dbpath \usr\mongodb\data\dbs\master"  --repair  
  2. 修复命令必须提供数据路径

另外我们也可以在mongo shell 中修复正在运行的数据库存

 
 
  1. >use test  
  2.  
  3. >db.repairDataBase() 

接下来我们在来看一下另外二种读扩展式的备份机制。

Master-Slave

主从复制模式:即一台主写入服务器,多台从备份服务器。从服务器可以实现备份,和读扩展,分担主服务器读密集时压力,充当查询服务器。但是主服务器故障时,我们只能手动去切换备份服务器接替主服务器工作。这种灵活的方式,使扩展多如备份或查询服务器相对比较容易,当然查询服务器也不是无限扩展的,因为这些从服务器定期在轮询读取主服务器的更新,当从服务器过多时反而会对主服务器造成过载。

我们以之前创建的端口为27017做为主服务器,再创建个端口为27018从服务器

重新启动27017为主服务器 --master 主服务器

 
 
  1. ....bin>mongod  --dbpath "C:\Program Files\mongodb\data\dbs\master" --master 

创建27018为从服务器  --slave 从服务器  --source 指定主服务器

 
 
  1. ....bin>mongod --port 27018 --dbpath "C:\Program Files\mongodb\data\dbs\slave27018"   --slave --source localhost:27017 

主服务器可以通过自己local库的slave集合查看从服务器列表

从服务器可以通过自己local库的source集合查看主服务器信息或维护多个主服务器。 (一个slave服务器可以服务多个master服务器)

或者我们可以通过http console查看状态


-------------------------------------------------------------------------------------------------------------------------------------------------------------

简要说一下MongoDB的备份方式:

1. mogodump / mongorestore

这2命令将mongodb的数据dump为BSON格式,需要的时候可以恢复。
这种方式作为小的数据库还适用。但如果是sharding或者几百G数据以上的话
就几乎不可用了。因为BSON及其占用空间。

2. Slave Replication

这是最适合和可靠的,适合生产环境。MongoDb支持master+多个slave。因此可以很方便的起一个slave来进行备份。
但是需要注意的是如果数据量很大的话,如果是新建的slave,速度又没有保证的话,一定要调高 oplogSize 的大小,对于一个300G的数据库,
可以调到60G以上。这样避免同步到中间出现oplogSize不足等异常。

3. 关于增量热备份

对于某些热衷单独文件备份的同志,也可以考虑使用“增量热”备份的方式作为最后的屏障。
做法就是,最开始将某个slave暂时shutdown,然后将数据库文件复制到另一个目录作为增量备份的起点。

每次备份的时候,在这个目录上起一个slave, 使用–fastsync参数,同步完毕即可tar这个目录就可以了。

这种方式的一个缺点就是如果备份周期的过长的话,空间浪费会非常大,尤其是频繁删除的情况下,
目前1.6以前的版本对于删除的空间回收机制有bug。这个问题应该在1.6版本发布时候解决。

要想回收这些空间需要repairDatabase,速度比较慢,不如直接从头clone一个新的db了。(其实Repair的过程也就是先clone然后copy回来)。

综上所述, 最靠谱和安全的备份方式就是用mongodb自身的同步复制机制.
最经典也最小的生产环境是:
1 master + 2 slaves


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mongodb备份工具mongodump可以在Mongodb运行时进行备份。它的工作原理是对运行的Mongodb进行查询,然后将查询到的文档写入磁盘。mongodump的参数与mongoexport的参数基本一致,可以完成大多数场景的数据备份。 使用mongodump进行备份时,需要注意一些事项。首先,在使用之前需要仔细阅读相关文档,并进行实际操作测试其功能特性。其次,在备份和恢复过程中,需要确保主机的环境与备份时尽可能保持一致,包括数据库版本、操作系统等等。此外,在进行恢复操作时,需要先停止mongod实例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MongoDB数据库备份(mongodump)以及恢复(mongorestore)工具实践](https://blog.csdn.net/mybluesky1983/article/details/126598891)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [mongoDB的三种基础备份方法](https://blog.csdn.net/qq_37437983/article/details/125452608)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值