mogodb备份注意事项

本文详细介绍了MongoDB数据库的备份、恢复、迁移及回滚过程,包括冷备方式、使用mongodump和mongorestore工具进行在线备份与恢复,以及Master-Slave主从复制模式下的数据保护机制。此外,文章还提到了增量热备份的实现方法,旨在为用户提供全面的数据库管理解决方案。

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


### MongoDB备份的最佳实践与方法 MongoDB 提供了多种备份和恢复工具,能够满足不同使用场景下的需求。以下是几种常见的 MongoDB 备份方法及其特点: #### 1. 使用 `mongodump` 进行逻辑备份 `mongodump` 是一种常用的逻辑备份工具,可以导出数据库中的数据并保存为 BSON 文件。这种方法适合中小型部署或定期全量备份的场景[^1]。 ```bash mongodump --host <hostname> --port <port> --db <database_name> --out <backup_directory> ``` 此命令会将指定数据库的数据导出到本地文件夹中。需要注意的是,在执行备份期间可能会对生产环境造成一定的性能影响,因此建议在低峰时段运行。 --- #### 2. 利用 `mongodb_consistent_backup` 实现一致性备份 对于需要高可靠性和一致性的备份场景,Percona 开发的开源项目 `mongodb_consistent_backup` 可以提供支持。该工具能够在不显著降低数据库性能的前提下完成备份操作[^4]。 安装完成后,可以通过配置文件定义备份策略,并自动处理增量备份、压缩存储等功能。这种方式特别适用于大规模分布式集群环境。 --- #### 3. 基于副本集(Replica Set)实现物理备份 如果希望获得更高的效率,则可以直接复制主节点上的数据目录至其他位置作为冷备。不过在此之前需确保已启用日志记录功能(WiredTiger 存储引擎默认开启),以便后续通过 oplog 应用差异更新。 具体流程如下: - 将源实例设置为只读模式; - 关闭 mongod 或锁定写入权限; - 执行 rsync 同步原始数据路径; - 解锁/重启服务恢复正常状态; 上述过程虽然复杂度较高但能有效保障最终一致性。 --- #### 4. 自动化管理平台 (Ops Manager / Cloud Manager) 为了简化日常运维工作负载,官方推荐采用 MongoDB Ops Manager 或 Cloud Manager 来集中管理和调度各项任务,其中包括但不限于定时计划安排、远程传输加密保护等内容[^2]^。 这些产品不仅限于简单的文件存档,还额外包含了可视化界面展示健康指标趋势图谱分析报告等增值服务选项可供选择购买订阅版本获取更多高级特性增强体验效果明显优于单纯依赖脚本编写方式手动干预程度更低稳定性更强安全性更高值得考虑引入企业内部技术栈当中长期规划发展路线图制定清晰明确的目标方向指引团队成员共同努力奋斗成就伟大事业梦想成真指日可待! --- ### 注意事项 无论选用哪种方案都应当遵循以下原则来提高整体效能表现水平达到预期标准要求范围之内合理分配计算资源消耗成本控制预算范围内做出最优决策判断依据科学理论基础之上综合评估各个因素相互作用关系得出结论意见仅供参考实际运用过程中可能还需要不断调整优化参数设定数值大小直至找到最适合当前业务需求状况的理想平衡点为止结束整个探索研究旅程收获满满的知识财富积累宝贵的经验教训成长进步更快更好更远未来充满无限可能性等待着我们去发现挖掘利用创造价值最大化回报社会贡献力量共同前进迈向辉煌明天共创美好世界共享幸福生活一起努力加油吧少年们向着星辰大海勇敢前行无惧风雨挑战自我超越极限追求卓越永不止步不停歇直到抵达成功的彼岸岸边享受胜利果实甜蜜滋味甜美的时刻来临啦欢呼雀跃庆祝一番吧朋友们让我们携手同行共铸传奇篇章留下属于自己的独特印记铭刻历史长河之中永不磨灭闪耀光芒照亮后来者前行的道路指引他们继续沿着这条光明大道坚定不移地走下去越走越宽广越来越顺畅一路顺风平安到达目的地终点站完美谢幕落幕收场再见👋🏻👋🏻👋🏻
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值