在大数据时代,企业的应用带来了大量的数据,它们可能具有结构化、半结构化或非结构化的性质。此外,应用程序开发周期短和可用性强都是他们要考虑的关键问题。考虑到这些应用程序的要求,在下一代平台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 数据库,怎么配置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)