如何在Ubuntu 14.04上备份、恢复及迁移MongoDB数据库

来源:互联网 发布:苹果瞄准镜软件 编辑:程序博客网 时间:2024/06/05 03:04

提供:ZStack云计算

MongoDB可谓目前人气最高的NoSQL数据库引擎之一。其凭借着出色的可扩展性、可靠性与易用性征服了无数用户。今天,我们将共同探讨如何备份、恢复及迁移MogoDB数据库。

对数据库进行导入与导出意味着需要以人类可读的格式处理数据,且确保其与其它软件产品相兼容。相比之下,备份与恢复操作则创建或使用MongoDB专用的二进制数据,其不仅能够保护数据本身的统一性与完整性,同时亦拥有独特的MongoDB属性。因此,只要源与目标系统彼此兼容,我们一般更倾向于使用备份与恢复机制。

先决条件

在开始本教程前,大家需要首先参考以下条件:

  • Ubuntu 14.04 Droplet
  • 非root sudo用户。具体细节参考Ubuntu 14.04服务器初始设置。
  • MongoDB的安装与配置请参阅如何在Ubuntu 14.04上安装MongoDB。
  • 参阅如何在Ubuntu 14.04上实现MongoDB数据库的导入与导出了解MongoDB数据库的导入与导出。

另外,除了部分特例,所有要求root权限的命令都应以非root sudo用户执行。

相关基础

如果大家了解MySQL等热门关系数据库系统,就会发现MongoDB的使用方式与其非常相似。

在上手MongoDB时,首先要了解的是json与bson(binary json)格式,它们负责对信息进行存储。Json是一种人类可阅读格式,更适用于数据的导出与导入。大家可以利用任何支持json格式的工具进行数据导出,包括文本编辑器。

下面来看json示例文档:

Example of json Format{"address":[{"building":"1007", "street":"Park Ave"},{"building":"1008", "street":"New Ave"},]}

Json格式易于处理,但却无法支持bson中的全部数据类型。这意味着如果选择使用json,则会发现部分信息“失真”。因此在备份与恢复工作中,我们最好选择二进制bson。

另外,大家不必在创建MongoDB数据库方面下太大功夫。如果大家指定要导入的数据库并不存在,系统会自动进行创建。更重要的是,其采用collection(数据库表)结构。相较于其它数据库引擎,MongoDB的结构能够根据插入的第一个文档(数据库行)自动创建。

第三,MongoDB所读取或者插入的大量数据可能占用大量资源,包括CPU、内存与磁盘空间。在利用MongoDB处理大型数据集及大数据时,这一点必须认真考量。最简单的解决方案就是在夜间或非高峰时段进行数据导出与备份。

第四,如果大家的MongoDB服务器在数据库导出或备份过程中发生信息变更,则可能影响到信息一致性。这一难题没有简单办法可以解决,不过在本文结尾,我们将针对复制操作给出参考资料。

虽然在数据备份与恢复时,导入与导出功能能够实现这一效果,但大家也可以利用其它更好的办法来确保MongoDB数据库的完整性。要对数据进行备份,大家应当使用mongodump命令。而在恢复时,则使用mongorestore。

备份MongoDB数据库

首先来看MongoDB数据库的备份方式。

Mongodump命令的一项重要参数正是–db,其负责指定大家希望备份的数据库名称。如果大家不指定数据库名称,则mongodump会备份全部数据库。第二项为–out,用于指定数据备份至哪个目录。假设我们希望将newdb数据库存储在/var/backups/mongobackups目录下,则备份数据处于/var/backups/mongobackups/01-20-16。首先,使用以下命令创建/var/backups/mongobakcups目录:

  • sudo mkdir /var/backups/mongobackups

备份命令如下所示:

  • sudo mongodump –db newdb –out /var/backups/mongobackups/date +"%m-%d-%y"

成功执行后的输出结果应为:

Output of mongodump2016-01-20T10:11:57.685-0500    writing newdb.restaurants to /var/backups/mongobackups/01-20-16/newdb/restaurants.bson2016-01-20T10:11:57.907-0500    writing newdb.restaurants metadata to /var/backups/mongobackups/01-20-16/newdb/restaurants.metadata.json2016-01-20T10:11:57.911-0500    done dumping newdb.restaurants (25359 documents)2016-01-20T10:11:57.911-0500    writing newdb.system.indexes to /var/backups/mongobackups/01-20-16/newdb/system.indexes.bson

请注意,我们在前面的目录路径处使用了+”%m-%d-%y”,其会直接获取当前数据,并将其备份至/var/backups/01-20-16/目录当中。这一机制非常适用于自动备份。

现在,大家已经在/var/backups/mongobackups/01-20-16/newdb/目录中拥有了完整的newdb数据库备份。此备份副本包含一切恢复所必需的newdb信息,也就是所谓“保真”。

一般来讲,我们需要对数据库进行定期备份,例如每天一次或者选择服务器负载较低的时段。因此,大家可以将mongodump命令设置为cron任务以定期执行,命令如下:

  • sudo crontab -e

请注意,sudo crontab要求我们以root用户编辑该cron任务。

在crontab提示符下插入以下mongodump命令:

Crontab window3 3 * * * mongodump --out /var/backups/mongobackups/`date +"%m-%d-%y"`

在以上命令中,我们使用了–db参数以确保全部数据库都能得到备份。

根据MongoDB数据库的具体规模,过为频繁的备份可能导致磁盘空间不足。因此我们需要定期清除旧有备份或者进行压缩。例如通过以下命令每七天删除全部旧有备份:

  • find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;

这条命令也可被添加为cron任务。其应当在开始下一次备份前运行,因此下面再次打开crontab:

  • sudo crontab -e

插入以下行:

Crontab window3 1 * * * find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;

这样一来,我们就拥有一套理想的MongoDB数据库备份方案。

恢复及迁移MongoDB数据库

在利用以上备份副本实现MongoDB数据库恢复,大家首先需要选取特定时间点的MongoDB信息副本,其中包括全部索引及数据类型。这一点对于希望迁移MongoDB数据库的用户来说特别重要。在恢复MongoDB时,我们需要使用mongorestore命令,其配合由mongodump生成的二进制备份副本共同起效。

仍然以newdb数据库为例,看看如何利用此前的备份副本实现恢复。我们首先使用–db参数指定数据库名称,而后利用–drop确保目标数据库为空。最后,我们在参数中指定最新备份目录/var/backups/mongobackups/01-20-16/newdb/。具体命令如下:

  • sudo mongorestore –db newdb –drop /var/backups/mongobackups/01-20-16/newdb/

成功后的输出结果为:

Output of mongorestore2016-01-20T10:44:47.876-0500    building a list of collections to restore from /var/backups/mongobackups/01-20-16/newdb/ dir2016-01-20T10:44:47.908-0500    reading metadata file from /var/backups/mongobackups/01-20-16/newdb/restaurants.metadata.json2016-01-20T10:44:47.909-0500    restoring newdb.restaurants from file /var/backups/mongobackups/01-20-16/newdb/restaurants.bson2016-01-20T10:44:48.591-0500    restoring indexes for collection newdb.restaurants from metadata2016-01-20T10:44:48.592-0500    finished restoring newdb.restaurants (25359 documents)2016-01-20T10:44:48.592-0500    done

在以上示例中,我们在同一服务器上利用备份副本实现了数据恢复。如果大家希望将数据迁移至其它服务器,则可使用同样的技术,只是将备份目录/var/backups/mongobackups/01-20-16/newdb/复制到另一服务器上。

总结

在本教程中,我们了解了如何对MongoDB数据库进行备份、恢复与迁移。大家也可参阅如何设置可扩展MongoDB数据库一文了解MongoDB的复制操作。

复制功能不仅能够实现可扩展性,同时也有相当重要的现实意义。复制允许我们在继续利用从MongoDB服务器运行MongoDB服务的同时,对主服务器进行恢复。另外,复制功能还可实现操作日志(oplog)机制,其能够记录全部对数据做出修改的操作。大家可以利用该日志对最后一次备份之后的数据进行恢复。备份工作通常在夜间进行,因此如果大家决定利用夜间的备份副本进行恢复,往往会错失大量数据更新。在这种情况下,日志恢复就变得非常重要了。

本文来源自DigitalOcean Community。英文原文:How To Back Up, Restore, and Migrate a MongoDB Database on Ubuntu 14.04 By Anatoliy Dimitrov

翻译:diradw

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华硕台式电脑开不了机怎么办 手机号申请qq账号上限了怎么办 店铺不干了被告商标侵权怎么办 咸鱼违规被投诉侵犯商标权怎么办 房子买了70年后怎么办 买房付完首付后怎么办 手机b站忘记密码怎么办 护士电子注册没有激活码怎么办 大王卡变3g网是怎么办 无法解析服务器的dns地址怎么办 笔记本dns辅服务器未响应怎么办 原营业执照注销法人没在怎么办? 加盟骗局公安局工商局不管怎么办 发现老婆衣柜里有避孕套怎么办 2岁宝宝爱舔东西怎么办 痔疮手术后痛疼怎么办 长了内痔疮该怎么办 淘宝卖家遇到恶意买家怎么办 淘宝遇到恶意买家拍单怎么办 淘宝遇到买家恶意搞坏商品怎么办 木油味道很重怎么办 床垫外面布坏了怎么办 淘宝店铺动态评分低怎么办 实创倒闭返款怎么办 qq红包忘记支付密码怎么办 qq红包支付密码忘了怎么办 个人卖东西人家要发票怎么办 打了欠条找不到人怎么办 公章掉进水里了怎么办 手游吃鸡限制登入15分钟怎么办 宝宝的小鸡淹了怎么办 宝宝小鸡底下淹了怎么办 4岁宝宝拉稀水怎么办 2岁半宝宝对眼怎么办 孩子在幼儿园中午不睡觉怎么办 20天婴儿拉稀水怎么办 3个月婴儿拉水怎么办 两岁宝宝拉水怎么办 1岁半宝宝拉水怎么办 5周孩子小鸡长脂肪粒怎么办 小孩丁丁长歪了怎么办