首页 > 其他分享 >mogodb备份注意事项

mogodb备份注意事项

时间:2023-06-11 17:36:51浏览次数:27  
标签:bin slave -- 备份 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结果。

mogodb备份注意事项_数据库

上面是冷备的方式,我们可以在不停止服务的情况下,使用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数据恢复之前先删除原有数据库里面的数据


    看一下运行结果:

    mogodb备份注意事项_服务器_02

    以上就是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


    标签:bin,slave,--,备份,mogodb,注意事项,服务器,数据库
    From: https://blog.51cto.com/u_16088628/6458323

    相关文章

    • Go语言中的init函数: 特点、用途和注意事项
      1.引言在Go语言中,init()函数是一种特殊的函数,用于在程序启动时自动执行一次。它的存在为我们提供了一种机制,可以在程序启动时进行一些必要的初始化操作,为程序的正常运行做好准备。在这篇文章中,我们将详细探讨init()函数的特点、用途和注意事项,希望能帮助你更好地理解和使用这个......
    • Go语言中的init函数: 特点、用途和注意事项
      1.引言在Go语言中,init()函数是一种特殊的函数,用于在程序启动时自动执行一次。它的存在为我们提供了一种机制,可以在程序启动时进行一些必要的初始化操作,为程序的正常运行做好准备。在这篇文章中,我们将详细探讨init()函数的特点、用途和注意事项,希望能帮助你更好地理解和使用这个......
    • OC学习笔记[注意事项]
      alloc new retain之后都必须要调用release方法计数器要变只有这几种方法retainreleaseallocnewcopy方法才会使计数器改变,谁想用人家对象,就对他进行retain操作,但在dealloc释放本对象的时候也释放引用的对象,先释放引用的对象,然后释放自己,内存管理做到”谁污染谁治......
    • MySQL逻辑备份
      一、mysqldump1.mysqldump的导出--只导出存储过程【dump备份】mysqldump-uroot-p-n-t-d--skip-add-drop-table-R数据库名>文件名##其中,-d表示--no-data(Norowinformation),-n表示--no-create-db不导出建库语句,-t表示--no-create-info不导出建表语句,##......
    • Vue进阶(幺贰幺):ElementUI 表单校验注意事项
      (文章目录)一、表单检验注:prop对应的不单单是rules规则里面的验证项,同时对应着form-item下v-model绑定的值。prop绑定的类要与el-form-item下v-model的值相对应。否则就算校验元素输入字符,也会提示“请输入”之类的提示语,造成校验不友好问题。二、清除表单校验//清除表单校......
    • 切片有哪些注意事项是一定要知道的呢
      1.引言在之前我写了一篇切片比数组好用在哪的文章,仔细介绍了切片相比于数组的优点。但切片事实上也隐藏着一些潜在的陷阱和需要注意的细节,了解和掌握切片的使用注意事项,可以避免意外的程序行为。本文将深入探讨Go语言切片常见的注意事项,从而能够更好得使用切片。2.注意事项2......
    • 切片有哪些注意事项是一定要知道的呢
      1.引言在之前我写了一篇切片比数组好用在哪的文章,仔细介绍了切片相比于数组的优点。但切片事实上也隐藏着一些潜在的陷阱和需要注意的细节,了解和掌握切片的使用注意事项,可以避免意外的程序行为。本文将深入探讨Go语言切片常见的注意事项,从而能够更好得使用切片。2.注意事项......
    • etcd备份
      备份用etcdctl备份,需要安装aptupdateapt upgradeaptinstall etcd  (自带etcdctl)备份命令:ETCDCTL_API=3 etcdctl snapshotsave etcd_back.db --endpoints=https://192.168.31.69:2379--cert=/etc/kubernetes/pki/etcd/server.crt --cacert=/etc/kubernet......
    • Windows 备份和还原 DirectX
      如果你需要备份DirectX,可以按照以下步骤进行:按下“Windows+R”键打开运行窗口,在窗口中输入“dxdiag”命令并按下回车键打开DirectX诊断工具。在DXDiag窗口中,点击“运行64位DxDiag”(如果你的系统为32位,则跳过此步骤)。在弹出的“DxDiag64位”窗口中,选择“显......
    • 备份mysql全量数据库为sql文件
      进入数据库bin目录,cmd运行mysqldump-utest-ptest--all-databases>all.sql 备注            -u后面接用户名 -p后面接密码  “>”是方向,这里指从左到右 备份结果:cmd命令行无提示错误即可, 备份结束的SQL文件才会显示文件大小,之前不显示......