欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~

本文由信姜缘 发表于云+社区专栏

MongoDB是最受欢迎的NoSQL数据库引擎之一。它以可扩展,强大,可靠和易于使用而闻名。在本文中,我们将向您展示如何备份,还原和迁移MongoDB数据库。

导入和导出数据库意味着以人类可读的格式处理数据,与其他软件产品兼容。相反,备份和还原操作创建或使用特定于MongoDB的二进制数据,这不仅保留了数据的一致性和完整性,还保留了其特定的MongoDB属性。因此,对于迁移,只要源系统和目标系统兼容,通常最好使用备份和恢复。如果您使用了Debian系统,可以参考腾讯云如何在Debian上安装MongoDB的教程。

准备

在学习本教程之前,请确保完成以下准备:

  • Ubuntu 14.04 服务器
  • 拥有sudo权限的非root用户。
  • 导入示例MongoDB数据库

除非另有说明,否则本教程中需要root权限的所有命令都应作为具有可以使用sudo权限的非root用户运行。

了解基础知识

在继续本文之前,需要对此问题有一些基本的了解。如果您有使用MySQL等流行的关系数据库系统的经验,那么在使用MongoDB时可能会发现一些相似之处。

您应该知道的第一件事是MongoDB使用json和bson(二进制json)格式来存储其信息。Json是人类可读的格式,非常适合导出和最终导入数据。您可以使用任何支持json的工具进一步管理导出的数据,包括简单的文本编辑器。

一个示例json文档如下所示:

Example of json Format

{"address":[
{"building":"1007", "street":"Park Ave"},
{"building":"1008", "street":"New Ave"},
]}

Json使用非常方便,但它不支持bson中可用的所有数据类型。这意味着如果使用json,将会出现所谓的“保真度丢失”。对于备份和恢复,最好使用二进制bson。

其次,您不必担心显式创建MongoDB数据库。如果您指定用于导入的数据库尚不存在,则会自动创建该数据库。集合'(数据库表)结构的情况更好。与其他数据库引擎相比,在MongoDB中,再次在第一个文档(数据库行)插入时自动创建结构。

第三,在MongoDB中读取或插入大量数据(例如本文的任务)可能会占用大量资源并占用大量CPU,内存和磁盘空间。重要的是,需要考虑到MongoDB经常用于大型数据库和大数据。解决此问题的最简单方法是在夜间或非高峰时段运行导出和备份。

第四,如果您有一个繁忙的MongoDB服务器,其信息在数据库导出或备份过程中发生变化,则信息一致性可能会有问题。这个问题没有简单的解决方案,但在本文的最后,您将看到有关进一步阅读复制的建议。

虽然您可以使用导入和导出功能来备份和还原数据,但还有更好的方法可以确保MongoDB数据库的完整性。要备份数据,您应该使用mongodump命令。要恢复,请使用mongorestore命令。让我们看看它们是如何工作的。

备份MongoDB数据库

我们首先介绍备份MongoDB数据库。

mongodumpis的一个重要参数--db,它指定要备份的数据库的名称。如果未指定数据库名称,mongodump将备份所有数据库。第二个重要参数是--out,它指定转储数据的目录。我们举一个例子来备份newdb数据库并将其存储在/var/backups/mongobackups目录中。理想情况下,我们将每个备份都放在当前日期的目录中,如/var/backups/mongobackups/01-20-16(2016年1月20日)。首先,让我们使用以下命令创建该目录:/var/backups/mongobackups

$ sudo mkdir /var/backups/mongobackups

然后我们的备份命令应如下所示:

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

成功执行的备份将具有如下输出结果:

Output of mongodump

2016-01-20T10:11:57.685-0500    writing newdb.restaurants to /var/backups/mongobackups/01-20-16/newdb/restaurants.bson
2016-01-20T10:11:57.907-0500 writing newdb.restaurants metadata to /var/backups/mongobackups/01-20-16/newdb/restaurants.metadata.json
2016-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

请注意,在上面的目录路径中,我们使用了日期date+"%m-%d-%y",它自动获取当前日期。这将允许我们将目录放在目录/var/backups/01-20-16/中。当我们自动执行备份时,这尤其方便。

此时,您可以在/var/backups/mongobackups/01-20-16/newdb/目录中对newdb数据库完整备份。此备份包含正确恢复newdb并保留其所谓的“保真度”的所有内容。

作为一般规则,您应该定期进行备份,例如每天进行备份,最好是在服务器负载最小的时候进行备份。因此,您可以将mongodump命令设置为cron作业,以便定期运行,例如每天凌晨03:03。要完成这个打开的crontab,cron的编辑器如下所示:

$ sudo crontab -e

请注意,在运行sudo crontab时,您将为root用户编辑cron作业。建议这样做,因为如果您为用户设置了crons,它们可能无法正确执行,尤其是当您的sudo配置文件需要密码验证时。

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

Crontab window

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

在上面的命令中,我们有意省略了--db参数,因为通常需要您备份所有数据库。

根据您的MongoDB数据库大小,您可能很快就会耗尽备份太多的磁盘空间。这就是为什么还建议定期清理旧备份或压缩它们。例如,要删除超过7天的所有备份,可以使用以下bash命令:

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

与上一个mongodump命令类似,此命令也可以添加为cron作业。它应该在您开始下一次备份之前运行,例如在凌晨03:01。为此,再次打开crontab:

$ sudo crontab -e

之后插入以下行:

Crontab window

3 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 mongorestore

2016-01-20T10:44:47.876-0500    building a list of collections to restore from /var/backups/mongobackups/01-20-16/newdb/ dir
2016-01-20T10:44:47.908-0500 reading metadata file from /var/backups/mongobackups/01-20-16/newdb/restaurants.metadata.json
2016-01-20T10:44:47.909-0500 restoring newdb.restaurants from file /var/backups/mongobackups/01-20-16/newdb/restaurants.bson
2016-01-20T10:44:48.591-0500 restoring indexes for collection newdb.restaurants from metadata
2016-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服务。回想一下,备份通常在夜间进行,如果您决定在晚上恢复备份,则会丢失自上次备份以来的所有更新。对于生产环境的服务器,我们建议您使用腾讯云云关系型数据库,可将您从耗时的数据库管理任务中解放出来,让您有更多时间专注于您的应用和业务。


参考文献:《How To Back Up, Restore, and Migrate a MongoDB Database on Ubuntu 14.04》

问答

Angular2如何处理http响应?

相关阅读

HTTP/2之服务器推送(Server Push)最佳实践

如何备份你的MySQL数据库

MySQL 8.0 版本功能变更介绍

云学院 · 课程推荐 | 腾讯高级工程师,带你快速入门机器学习

此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/developer/article/1176141?fromSource=waitui

搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!

海量技术实践经验,尽在云加社区

入门系列之在Ubuntu 14.04上备份,还原和迁移MongoDB数据库的更多相关文章

  1. deepsooncms在Ubuntu 14.04上部署教程

    deepsooncms在Ubuntu 14.04上部署教程 一.安装mono1.在命令行运行sudo apt-key adv --keyserver keyserver.ubuntu.com --re ...

  2. 翻译:在Ubuntu 14.04上安装FTP服务器的方法

    说明: 1.原文地址:http://www.krizna.com/ubuntu/setup-ftp-server-on-ubuntu-14-04-vsftpd/ 2.今天要做一个网络日志的迁移程序,搬 ...

  3. [转] 如何在 Ubuntu 14.04 上通过 apt-get 安装 Apache Tomcat 7

    PS:war 部署路径:/var/lib/tomcat7/webapps http://www.linfuyan.com/how-to-install-apache-tomcat7-on-ubuntu ...

  4. Ubuntu 14.04 上使用 Nginx 部署 Laravel

    本教程将会涉及以下工具: Ubuntu 14.04 LTS PHP 5.5 MySQL Laravel 5.0 Nginx 参考文章:Ubuntu 14.04 上使用 Nginx 部署 Laravel ...

  5. Ubuntu 14.04 上安装 Gurobi

    参考: Installing Gurobi 7 on Linux Ubuntu 14.04 上安装 Gurobi 1.在gurobi上创建一个账户,并登陆: 2.从gurobi optimizer上下 ...

  6. 在Ubuntu 14.04 上安装 FTP 服务

    1. sudo apt-get update 2. sudo apt-get install vsftpd 3. adduser sammy Assign a password when prompt ...

  7. 如何在 Ubuntu 14.04 上安装 Elasticsearch,Logstash 和 Kibana

    介绍 在本教程中,我们将去的 Elasticsearch 麋鹿堆栈安装 Ubuntu 14.04 — — 那就是,Elasticsearch 5.2.x,Logstash 2.2.x 和 Kibana ...

  8. Ubuntu 14.04上安装caffe

    本来实在windows 10上尝试安装caffe,装了一天没装上,放弃; 改在windows上装ubuntu的双系统,装了一个下午,不小心windows的系统盘被锁死了,也不会unlock?只好含泪卸 ...

  9. 怎样利用Heartbeat与Floating IP在Ubuntu 14.04上创建高可用性设置

    提供 ZStack社区 内容简单介绍 Heartbeat是一款开源程序,负责将集群基础设施容量--包括集群成员与消息收发--交付至客户server. Hearbeat在高可用性server基础设施其中 ...

随机推荐

  1. [Erlang36]kerl轻松管理安装各种OTP版本

    kerl只有一个目标:让我们在不同的OTP版本间随意切换.他是一个纯Bash项目.简单实用的工作利器! Readme里面用法已说明得非常清楚了.建议按流程来一次. 1.下载 安装(一个bash脚本,根 ...

  2. javascript做的一个根据table中某个td的值为日期时的倒计时

    JavaScript代码: <script> window.onload = window.onload = function () { getTdValue(); } //根据传过来的天 ...

  3. mac下wordpress环境搭建

    mac下本来就有apache和php,只需要配置以下+安装mysql 1.Apache 预装目录在  /etc/apache2: 默认的网站目录在 /Library/WebServer/Documen ...

  4. sgi stl内存池实现------源码加翻译

    class __default_alloc_template { enum { unit = 8 };//分配单位 后面直接用8代替 enum { max_bytes = 128 };//最大分配字节 ...

  5. DOS磁盘操作类命令

    外部命令 formAT---磁盘格式化命令  格式:formAT<盘符:>[/S][4][/Q] 1)命令收的盘符不可缺省,若对硬盘进行格式化,则会有如下提示:WARNING:ALL DA ...

  6. acedSSGet 翻译

    ObjectARX 参考指南 > 全局函数 > AcEd 全局函数 > acedSSGet 函数 acedSSGet 折叠全部 C++ int acedSSGet( const AC ...

  7. Python数据分析之文本处理词频统计

    1.项目背景: 原本计划着爬某房产网站的数据做点分析, 结果数据太烂了,链家网的数据干净点, 但都是新开楼盘,没有时间维度,分析意义不大. 学习的步伐不能ting,自然语言处理还的go on 2.分析 ...

  8. MyEclipse生成Javadoc帮助文档

    Javadoc是Sun公司提供的一个技术,它从程序源代码中抽取类.方法.成员等注释形成一个和源代码配套的API帮助文档.也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过Java ...

  9. tf入门-池化函数 tf.nn.max_pool 的介绍

    转载自此大神 http://blog.csdn.net/mao_xiao_feng/article/details/53453926 max pooling是CNN当中的最大值池化操作,其实用法和卷积 ...

  10. H5入门基础(一)

    我们还是围绕这几个问题来学习: 1.什么是H5? 2.为什么要用H5? 3.怎么用H5? 1.什么是H5? ♦HTML是指超文本标记语言(Hyper Text Markup Language). ♦H ...