备份和恢复

news/2024/11/19 9:28:48/文章来源:https://www.cnblogs.com/wonchaofan/p/18291495

mongodump从 MongoDB 数据库读取数据并创建高保真 BSON 文件,该mongorestore 工具可以使用该文件填充 MongoDB 数据库。 mongodump并且mongorestore是用于备份和恢复小型 MongoDB 部署的简单有效的工具,但并不适合捕获大型系统的备份。

mongodump只捕获数据库中的文档。生成的备份节省了空间,但mongorestore或mongod必须在恢复数据后重建索引。

当连接到MongoDB实例时,mongodump可能会对mongod性能产生不利影响。如果数据大于系统内存,则查询会将工作集挤出内存,从而导致页面错误。

当mongodump捕获输出时,应用程序可以继续修改数据。对于副本集,mongodump提供了--oplog选项,以便在其输出中包含mongodump操作期间出现的oplog条目。这允许相应的mongorestore操作重放捕获的oplog。要恢复使用--oplog创建的备份,请将mongorestore与--oplogReplay选项一起使用。

使用文件系统快照备份和恢复

这些文件系统快照或“块级”备份方法使用系统级工具来创建保存 MongoDB 数据文件的设备的副本。这些方法完成速度快且可靠,但需要在 MongoDB 之外进行额外的系统配置。

 快照的工作原理是在实时数据和特殊快照卷之间创建指针。这些指针在理论上相当于“硬链接”。由于工作数据与快照不同,快照过程使用写时复制策略。因此,快照仅存储已修改的数据。

制作快照后,将快照映像挂载到文件系统上并从快照中复制数据。生成的备份包含所有数据的完整副本。

照恢复不太实用,不做过多解释

使用 MongoDB 工具进行备份和恢复

要指定 MongoDB 实例的主机和端口,您可以:

使用SRV或标准连接字符串,在--uri字符串中指定主机名和端口:

mongodump --uri="mongodb+srv://username:password@cluster0.example.mongodb.net" <additional_options>

在字符串中指定主机名和端口--host

mongodump --host="mongodb0.example.com:27017" <additional_options>

--host在和中指定主机名和端口--port

mongodump --host="mongodb0.example.com" --port=27017 <additional_options>

mongodump将写入BSON文件,其中包含可通过mongod.example.net主机的27017端口上的mongod侦听访问的数据副本。有关详细信息,请参阅从非本地mongod实例创建备份。

要指定不同的输出目录,您可以使用以下--out or -o选项:

mongodump --out=/opt/backup/mongodump-1

要限制数据库转储中包含的数据量,可以指定--db和--collection作为mongodump的选项。例如

mongodump --collection=myCollection --db=test

mongodump的--oplog选项收集oplog条目,并允许您在实时数据库上执行备份。如果以后从备份中恢复数据库,则数据库将与备份过程完成时相同。

使用--oplog,mongodump可以复制源数据库中的所有数据以及备份过程开始到结束的所有oplog条目。此操作与mongorestore--oplogReplay结合使用,可以还原反映mongodump完成创建转储文件时对应的特定时刻的备份。

使用--oplog参数,会把从开始执行mongodump至结束期间生成的oplog也转储

mongodump \--host=mongodb1.example.net \--port=3017 \--username=user \--password="pass" \--out=/opt/backup/mongodump-1
mongorestore \--host=mongodb1.example.net \--port=3017 \--username=user \--authenticationDatabase=admin \/opt/backup/mongodump-1

mongorestore --drop  #删除选项

从 MongoDB 备份恢复副本集

1、用一个实例已备份文件作为数据目录 启动,连接至数据库,删除local数据库,

mongod --dbpath /data/db <startup options>
use local
db.dropDatabase()

2、关闭后,紧接着作为副本集启动

mongod --dbpath /data/db --replSet <replName> <startup options>

3、连接到副本集,执行副本集初始化,此时初始化成员只有目前一个节点

rs.initiate( {_id : <replName>,members: [ { _id : 0, host : <host:port> } ]
})

4、将其他节点添加入副本集rs.add()

初始同步可能需要很长时间才能完成。对于大型数据库,最好将数据库文件复制到每台主机上。

备份和恢复分片集群

要使用文件系统快照进行备份,您必须首先停止平衡器、停止写入并停止集群上的任何模式转换操作。

在此过程中,您将停止集群平衡器并备份配置数据库,然后使用文件系统快照工具备份集群中的每个分片。如果您需要系统的精确时刻快照,则需要在拍摄文件系统快照之前停止所有写入;否则快照只会近似于某个时刻。

 要备份分片集群,您必须使用fsync命令或 db.fsyncLock()方法停止对集群的写入。这有助于降低备份中出现不一致的可能性。
sh.stopBalancer()

如果平衡轮次目前正在进行中,则操作会等待平衡完成。

要验证平衡器是否已停止,请使用以下 sh.getBalancerState()命令:

use config
while( sh.isBalancerRunning().mode != "off" ) {print("waiting...");sleep(1000);
}

要锁定分片集群,请使用以下db.fsyncLock()命令:

db.getSiblingDB("admin").fsyncLock()

在mongos和配置服务器的主mongod上运行以下聚合管道。要确认锁定,请确保fysncLocked字段返回true,fsyncUnlocked字段返回false。

db.getSiblingDB("admin").aggregate( [{  $currentOp: { } },{  $facet: {"locked": [{ $match: { $and: [{ fsyncLock: { $exists: true } }] } }],"unlocked": [{ $match: { fsyncLock: { $exists: false } } }]} },{  $project: {"fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] },"fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] }} }] )

 备份配置服务器会备份分片集群的元数据。您只需备份一个配置服务器,因为它们都保存相同的数据

使用文件系统快照备份和恢复中介绍的步骤,对每个分片的主成员执行文件系统快照

备份完成后,您必须解锁集群以允许恢复写入。

要解锁集群,请使用以下db.fsyncUnlock()命令:

db.getSibling("admin").fsyncUnlock()

要重新启动平衡器,请使用以下sh.startBalancer()命令:

要确认平衡器正在运行,请使用以下 sh.getBalancerState()命令:

 

 

使用数据库转储备份分片集群

过程和上述文件系统级备份相似,差别在于备份方式:

mongodump \--host mongos.example.net \--port 27017 \--username user \--password "passwd" \--out /opt/backups/example-cluster-1

恢复分片集群

关闭正在运行的 MongoDB 进程

use admin
db.shutdownServer()

准备数据目录

sudo mkdir /path/to/mongodb
sudo chown -R mongodb:mongodb /path/to/mongodb
sudo chmod -R 770 /path/to/mongodb

准备日志目录

sudo mkdir /path/to/mongodb/logs
sudo chown -R mongodb:mongodb /path/to/mongodb/logs
sudo chmod -R 770 /path/to/mongodb/logs

创建配置文件

sudo touch /path/to/mongod.conf
sudo chown mongodb:mongodb /path/to/mongodb/mongod.conf
sudo chmod 644 /path/to/mongodb/mongod.conf

将数据文件从备份数据位置 复制到B 中创建的数据目录。准备目标主机进行恢复

cp -a /backup/mongodb/path/to/mongodb /path/to/mongodb

注释掉或者省略以下 配置文件设置:

#replication
#  replSetName: myCSRSName
#sharding
#  clusterRole: configsvr

启动mongod使用配置文件,

mongod --config /path/to/mongodb/mongod.conf
use local
db.dropDatabase()

更改副本集主机名,在配置服务器上更改

use config
db.shards.find( { "_id" : "<shardName>" } )

此操作返回类似于以下内容的文档:

{"_id" : "shard1","host" : "myShardName/alpha.example.net:27018,beta.example.net:27018,charlie.example.net:27018","state" : 1
}

使用updateOne()方法更新 hosts字符串以反映分片的计划副本集名称和主机名列表。例如,以下操作使用 更新 host分片的连接字符串"_id" : "shard1"

db.shards.updateOne({ "_id" : "shard1" },{ $set : { "host" : "myNewShardName/repl1.example.net:27018,repl2.example.net:27018,repl3.example.net:27018" } }
)
replicationreplSetName: myNewCSRSName
shardingclusterRole: configsvr
mongod --config /path/to/mongodb/mongod.conf
rs.initiate()
rs.add("config2.example.net:27019")
rs.add("config3.example.net:27019")

更新分片

每个分片都有其连接配置文件的信息,需要修改这些信息,这就是和配置服务器恢复相比,多出来的步骤

为了安全考虑,新建一个具有系统权限的临时用户,去更改,更改完后删除临时用户。

use admin
db.auth("myUserAdmin","mySecurePassword")
db.createUser({user: "mySystemUser",pwd: "<replaceMeWithAStrongPassword>",roles: [ "__system" ]}
)
db.auth("mySystemUser","<replaceMeWithAStrongPassword>")
use local
db.dropDatabase()
use admin
db.system.version.deleteOne( { _id: "minOpTimeRecovery" } )
db.system.version.find( {"_id" : "shardIdentity" } )
db.system.version.updateOne({ "_id" : "shardIdentity" },{ $set :{ "configsvrConnectionString" : "myNewCSRSName/config1.example.net:27019,config2.example.net:27019,config3.example.net:27019"}}
)

重新启动

replicationreplSetName: myNewShardName
shardingclusterRole: shardsvr
mongod --config /path/to/mongodb/mongod.conf
rs.initiate()
rs.add("repl2.example.net:27018")
rs.add("repl3.example.net:27018")

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/741065.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件目录损坏数据恢复

文件目录损坏数据恢复是一个涉及多个步骤和可能解决方案的过程。 一、使用系统自带的磁盘检查工具 在Windows系统中,您可以使用CHKDSK工具来检查和修复磁盘错误,包括文件目录的损坏。 打开命令提示符:按【Win+R】打开运行窗口,输入【cmd】,然后点击【确定】。 运行CHKDSK命…

硬盘固件损坏

硬盘固件损坏是一个相对复杂的问题,它可能由多种原因引起,并可能导致硬盘无法正常工作或数据丢失。 一、硬盘固件损坏的原因 电源故障:电源不稳定或电力波动可能导致硬盘固件受损。突然的电源断电、电压过高或过低都可能对硬盘固件造成不可逆的损坏。 固件更新失败:在固件更…

服务器硬盘坏道的常见原因和预防方法

一、什么是服务器的硬盘坏道? 硬盘坏道是指硬盘上某个或某些扇区出现物理损坏的情况,这会导致存储在这些扇区上的数据无法读取或写入。硬盘坏道问题的存在可能会对数据的完整性和可靠性造成严重影响,因此及时识别和修复硬盘坏道问题至关重要。 服务器硬盘的坏道的原理是由于…

linux 上安装FTP : vsftpd (含常见问题:读取目录列表失败,的处理)

服务器上有时候需要安装ftp以便调试或给不懂使用服务器命令的同学更新文件1、安装vsftpdyum update yum install vsftpd2、编辑配置文件   确保以下配置的值和下面一致  anonymous_enable=NO local_enable=YES write_enable=YES chroot_local_user=YES这些配置的作用如下:…

海康威视固态硬盘全盘恢复

海康威视固态硬盘的全盘恢复主要涉及到数据恢复的问题,尤其是在数据丢失、误删除或硬盘格式化等情况下。 一、备份恢复 检查备份: 如果在数据丢失之前已经对海康威视固态硬盘进行了备份,那么最直接且有效的恢复方式就是通过备份数据来还原。 备份可能存储在USB、移动硬盘、远…

linux 上安装 vsftpd (含常见问题:读取目录列表失败,的处理)

服务器上有时候需要安装ftp以便调试或给不懂使用服务器命令的同学更新文件1、安装vsftpdyum update yum install vsftpd2、编辑配置文件   确保以下配置的值和下面一致  anonymous_enable=NO local_enable=YES write_enable=YES chroot_local_user=YES这些配置的作用如下:…

K8S学习教程(三):在PetaExpress KubeSphere 容器部署 Wiki 系统 wiki.js 并启用中文全文检索

背景wiki.js 是非常优秀的开源 Wiki 系统,尽管在与 xwiki 功能相比 ,还不算完善,但也在不断进步。 常用的功能还是比较实用的,如:Wiki 写 作、分享、权限管理功能还是非常实用的,UI 设计非常的漂亮,精美的界面和直观的操作体验,能够满足小团队的基本知识管理需求。认真…

java将对象中的值赋值为另一个对象--modelMapper

目标:将两个对象中的非空值赋值给第三个对象,要求第三个对象拥有前面两个对象中的非空值 方法:使用modelMapper 代码://定义第一个对象Person person = new Person(); person.setName("1"); //定义第二个对象 Person person1 = new Person(); person1.setHigh(Bi…

云原生实践总结

企业落地云原生的目的 一句话概括:在保证稳定性的前提下,降本增效 目标拆解:保障稳定性建设高可用性:基础组件(Master三大件/Etcd等)高可用、多机房、多集群、Pod 高可用 持续进行风险治理:耦合度、故障发现、容量、容灾、变更及可运维性、安全性 建设可观测性:Metrics…

VMware ESXi 8.0U3 macOS Unlocker OEM BIOS Dell (戴尔) 定制版

VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS Dell (戴尔) 定制版VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS Dell (戴尔) 定制版 ESXi 8.0U3 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Hitachi (日立)、Fujitsu (富士通)、N…

Python工具箱系列(五十四)

二维码生成 二维码(Quick Response Code)几乎已经渗透到我们日常生活的每一个角落,它是 1994 年发明的一种矩阵条形码,可以用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形。在代码编制上巧妙地利用构成计算机内部逻辑基础…

接入应用内支付服务,提高商业变现效率

在当今竞争激烈的移动应用市场中,开发者们面临着提升应用商业变现能力的挑战。用户体验的流畅性和支付的安全性至关重要。 HarmonyOS SDK应用内支付服务(IAP Kit)为开发者提供了一站式的解决方案,简化了应用内支付的接入流程,同时确保了支付的便捷性和安全性。这不仅有效提…