如何在mongodb上备份和恢复数据

如何在mongodb上备份和恢复数据,第1张

在大数据时代,企业的应用带来了大量的数据,它们可能具有结构化、半结构化或非结构化的性质。此外,应用程序开发周期短和可用性强都是他们要考虑的关键问题。考虑到这些应用程序的要求,在下一代平台3应用程序中,企业必须超越传统的关系数据库(IaaS或基于云计算PaaS)。在NoSQL数据库中,像MongoDB现在就被采用了,同时又对这些下一代应用程序的企业进行了评估(如电子商务、内容管理等)。MongoDB提供了动态模式,通过自动分片易扩展、读写一致性和在内置中进行复制的功能。

MongoDB数据库具有本地复制的功能,同时满足可用性的需求。然而,数据保护要求可伸缩的时间点备份和恢复需要得到很好的解决。对于可靠的数据保护,企业需要备份和复制!没有时间点的备份,组织会由于人为的错误、逻辑混乱和其他 *** 作的失败导致有丢失数据的风险。传统的备份解决方案是建立在关系数据库中,使用共享存储和ACID事务模型,来解决结构化平台2应用程序的要求而建的。不幸的是,他们不足以解决平台 3 应用程序和分布式的数据库(本地存储、 最终一致性和基础设施的d性性质)的时间点备份要求。有几个备用的基于脚本的解决方案(例如地层等),企业正在使用填补数据来保护缩短差距,但这些解决方案充其量算是次优的。

手动脚本解决方案

这些解决方案利用本地MongoDB快照工具和脚本将数据传输到辅助存储。(通过 mongodump) 脚本自定义的每个 MongoDB 集群和需要业务作出了重大努力,以适应任何拓扑更改 (例如添加或删除节点到 MongoDB 数据库) 或扩大规模。此外,这些脚本不适应失败场景,比如失败的一个节点(一级或二级)或间歇性的网络问题。最后,恢复(“备份”)的最重要的价值是一个手动过程。因此,耗费时间(导致很高的应用程序停机时间),并包含脚本中的任何 bug 数据丢失风险。总的来说,这些解决方案工作在MongoDB环境中很小和一些允许在应用程序中丢失的数据。这些解决方案所面临的一些关键问题是:

对分片配置的企业备份解决方案的不足;

当快照被取时,数据库需要脱机;

在节点故障和其他基础设施故障下,备份和恢复都失败了;

恢复过程是手动的并且需要验证,从而增加恢复时间;

收集级的恢复需要耗时的手动恢复;

恢复与不同的测试/开发的拓扑(切分 → 分片)刷新是不可用的。

MongoDB支付备份和恢复(又名“MMS”)

MongoDB(公司)本身提供了一些备份MongoDB数据库的方法。企业可以选择从一个管理备份提供(MMS)运行在公共云,或如果他们支付 MongoDB 的客户,他们可能以部署本地备份服务为前提。除了成本过高,在公共云上管理备份服务存储的客户数据。对于部署 MongoDB 为前提,在 WAN 上备份数据传输可能无法为客户工作,并且海需要为客户保持他们对数据内部的敏感度。此外,还有重要的数据来限制每个碎片去使用这项服务。

使用MongoDB部署备份服务是有可能的,但部署和实施过于复杂。企业需要部署8台服务器,附加数据库(额外的许可证)和 6-9x存储容量。总的来说,部署备份服务是一个理论上的解决方案,带来了显著的CAPEX和OPEX投资:

部署多个数据库的复杂性;

额外的基础设施成本;

授权额外的MongoDB节点成本;

当节点失败时,带来备份失败的风险;

独立的MongoDB数据库备份基础设施。

实现企业客户的数据保护要求,进入了新兴的下一代分布式数据库的时代(键值、图形、文档库等),并且解决上述方案的局限性。Datos IO建造了产业界首次扩展数据保护软件产品,使平台3应用程序能部署到分布式和云数据库上,如MongoDB和Apache Cassandra。Datos IO解决方案是刚刚兴起的下一代应用程序,迎合了业主和DevOps的应用需求,并解决了部署和管理保护基础设施 *** 作所带来的一切麻烦。最重要的是,它是一个可靠的和可扩展的解决方案,即使在使用节点失败的场景下,也会通过最小化恢复时间获得最优的性能。

使用场景:

(1)网站数据:MongoDB适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。

(2)缓存:由于性能很高,MongoDB也适合作为信息基础设施的缓存层。在系统重启之后,由MongoDB搭建的持久化缓存层可以避免下层的数据源过载。

(3)大尺寸,低价值的数据。

(4)高伸缩性的场景:MongoDB适合由数十或数百台服务器组成的数据库。

(5)用于对象及JSON数据的存储:MongoDB的BSON数据格式适合文档化格式的存储及查询。

mongodb设计特点:

(1)面向集合存储,容易存储对象类型的数据。在MongoDB 中数据被分组存储在集合中,集合类似RDBMS 中的表,一个集合中可以存储无限多的文档。

(2)模式自由,采用无模式结构存储。在MongoDB 中集合中存储的数据是无模式的文档,采用无模式存储数据是集合区别于RDBMS 中的表的一个重要特征。

(3)支持完全索引,可以在任意属性上建立索引,包含内部对象。MongoDB的索引和RDBMS 的索引基本一样,可以在指定属性、内部对象上创建索引以提高查询的速度。除此之外,MongoDB 还提供创建基于地理空间的索引的能力。

(4)支持查询。MongoDB 支持丰富的查询 *** 作,MongoDB 几乎支持SQL中的大部分查询。

(5)强大的聚合工具。MongoDB 除了提供丰富的查询功能外,还提供强大的聚合工具,如count、group 等,支持使用MapReduce 完成复杂的聚合任务。

方法/步骤

1

打开百度首页,搜索“MongoDB”,如下图所示:

2

网站主页中,点击“DOWNLOAD MONGODB”,并下载最新稳定版本,如下图所示:

3

下载下来的是一个msi安装文件,点击进行安装,默认安装到C:\Program File或C:\Program Files (x86)文件夹内,如下图所示:

4

配置环境变量,右键“我的电脑”->"高级系统设置"->"高级"->"环境变量",在系统变量中找到Path变量值,进行修改,在末尾追加 ;C:\Program Files (x86)\MongoDB\bin,(当然你也可以将第3步骤中的MongoDB文件夹拷贝到其他磁盘路径下,我就是这样做的),如下图所示:

5

为了验证环境变量配置成功,打开CMD命令提示符,输入 mongod -help,下面会罗列一些列的配置参数,说明已成功,如下图所示:

6

在MongoDB文件夹下和bin目录同级目录下,新建一个data文件夹,data文件夹下再分别新建一个db和log文件夹,分别用来存放数据文件和日志文件,如下图所示:

7

在命令行中输入以下内容

mongod --dbpath "F:\MongoDB\data\db" --logpath

"F:\MongoDB\data\log\MongoDBlog" --install --serviceName "MongoDB"

这里是日志路径和数据路径,具体的路径根据自己数据和日志文件的文件路径相应进行修改,这里MongoDBlog就是开始建立的日志文件,--serviceName "MongoDB" 服务名为MongoDB。这样就在Windows下成功建立了MongoDB的服务,如下图所示:

8

在“运行”中输入“servicesmsc”,打开“服务”管理界面,可以看到MongoDB这个服务,点击列表中的“MongoDB”,再点击“启动”按钮,就将MongoDB成功启动了

安装MongoDB数据库软件包可以通过apt-get实现。但我们修要安装官方提供MongoDB软件源。 修改apt的sourcelist文件,增加10gen的设置。 如果我的回答没能帮助您,请继续追问。

1 停止单节点的mongod

我们可以从mongo shell里运行dbshutdownServer()命令来停止mongod

[javascript]

> use admin;

switched to db admin

> dbshutdownServer()

2 使用--replSet的选项加上新的复制集的名字来重新启动这个mongod

[javascript]

bash-32$ mongod --dbpath /data/db --logpath /data/mongodlog --logappend --fork --port 30000 --replSet rs0

about to fork child process, waiting until server is ready for connections

forked process: 3092

all output going to: /data/mongodlog

child process started successfully, parent exiting

3 连接刚才启动的数据库

[javascript]

bash-32$ mongo --port 30000

MongoDB shell version: 245

connecting to: 127001:30000/test

Server has startup warnings:

Mon Jul 29 11:28:02291 [initandlisten]

Mon Jul 29 11:28:02291 [initandlisten] WARNING: soft rlimits too low Number of files is 256, should be at least 1000

4 在mongo shell里创建一个包含复制集配置信息的对象

[javascript]

rsconf = {

_id: "rs0",

members: [

{

_id: 0,

host: "localhost:30000"

}

]

}

5 用rsinitiate()来初始化复制集

[javascript]

> rsinitiate( rsconf )

{

"info" : "Config now saved locally Should come online in about a minute",

"ok" : 1

}

6 初始化完毕后,我们可以用rsconf()来查看复制集的配置

[javascript]

> rsconf()

{

"_id" : "rs0",

"version" : 1,

"members" : [

{

"_id" : 0,

"host" : "localhost:30000"

}

]

}

7 我们还可以用rsstatus()来查看复制集的运行状态

[javascript]

rs0:PRIMARY> rsstatus()

{

"set" : "rs0",

"date" : ISODate("2013-07-29T02:15:07Z"),

"myState" : 1,

"members" : [

{

"_id" : 0,

"name" : "localhost:30000",

"health" : 1,

"state" : 1,

"stateStr" : "PRIMARY",

"uptime" : 2185,

"optime" : Timestamp(1375062044, 1),

"optimeDate" : ISODate("2013-07-29T01:40:44Z"),

"self" : true

}

],

"ok" : 1

}

8 启动一个新的mongod服务

[javascript]

bash-32$ mkdir -p /data/db2

bash-32$ mongod --dbpath /data/db2 --logpath /data/db2/mongodlog --logappend --fork --port 30001 --replSet rs0

about to fork child process, waiting until server is ready for connections

forked process: 3118

all output going to: /data/db2/mongodlog

child process started successfully, parent exiting

9 将新的mongod添加到复制集里

[javascript]

rs0:PRIMARY> rsadd("localhost:30001")

{ "ok" : 1 }

10 再启动一个新的mongod服务来作为仲裁节点

[javascript]

bash-32$ mkdir -p /data/arb

bash-32$ mongod --dbpath /data/arb --logpath /data/arb/mongodlog --logappend --fork --port 30002 --replSet rs0

about to fork child process, waiting until server is ready for connections

forked process: 3124

all output going to: /data/arb/mongodlog

child process started successfully, parent exiting

11 将新启动的mongod服务作为仲裁节点添加到复制集中

[javascript]

rs0:PRIMARY> rsaddArb("localhost:30002")

{ "ok" : 1 }

12 查看复制集的状态

[javascript]

rs0:PRIMARY> rsstatus()

{

"set" : "rs0",

"date" : ISODate("2013-07-29T02:18:20Z"),

"myState" : 1,

"members" : [

{

"_id" : 0,

"name" : "localhost:30000",

"health" : 1,

"state" : 1,

"stateStr" : "PRIMARY",

"uptime" : 2378,

"optime" : Timestamp(1375064276, 1),

"optimeDate" : ISODate("2013-07-29T02:17:56Z"),

"self" : true

},

{

"_id" : 1,

"name" : "localhost:30001",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 34,

"optime" : Timestamp(1375064276, 1),

"optimeDate" : ISODate("2013-07-29T02:17:56Z"),

"lastHeartbeat" : ISODate("2013-07-29T02:18:18Z"),

"lastHeartbeatRecv" : ISODate("2013-07-29T02:18:18Z"),

"pingMs" : 0,

"syncingTo" : "localhost:30000"

},

{

"_id" : 2,

"name" : "localhost:30002",

"health" : 1,

"state" : 7,

"stateStr" : "ARBITER",

"uptime" : 24,

"lastHeartbeat" : ISODate("2013-07-29T02:18:18Z"),

"lastHeartbeatRecv" : ISODate("2013-07-29T02:18:19Z"),

"pingMs" : 0

}

],

"ok" : 1

}

以上就是关于如何在mongodb上备份和恢复数据全部的内容,包括:如何在mongodb上备份和恢复数据、mongodb使用场景是什么、想配置mongodb 数据库,怎么配置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10138744.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存