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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 在Ubuntu 14.04上如何备份、恢复和迁移MongoDB数据库

简介

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

导入和导出数据库意味着处理以人类可读格式存储的数据,与其他软件产品兼容。相比之下,备份和恢复操作创建或使用特定于 MongoDB 的二进制数据,这不仅保留了数据的一致性和完整性,还保留了其特定的 MongoDB 属性。因此,对于迁移,通常最好使用备份和恢复,只要源系统和目标系统是兼容的。

先决条件

在按照本教程之前,请确保您完成以下先决条件:

  • Ubuntu 14.04 Droplet
  • 非 root sudo 用户。查看《使用 Ubuntu 14.04 进行初始服务器设置》中的详细信息。
  • 已安装并配置了 MongoDB,使用文章《如何在 Ubuntu 14.04 上安装 MongoDB》中的说明。
  • 使用《在 Ubuntu 14.04 上导入和导出 MongoDB 数据库》中的说明导入了示例 MongoDB 数据库。

除非另有说明,本教程中需要 root 权限的所有命令都应该以具有 sudo 权限的非 root 用户身份运行。

理解基础知识

在继续阅读本文之前,需要对相关内容有一些基本的了解。如果您有使用流行的关系型数据库系统(如 MySQL)的经验,您可能会在使用 MongoDB 时发现一些相似之处。

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

一个示例的 json 文档如下:

{"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 数据库。

mongodump 的一个重要参数是 --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"`

成功执行备份将产生如下输出:

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 命令设置为定期运行,例如每天凌晨 03:03。要实现这一点,打开 crontab,cron 的编辑器,如下所示:

sudo crontab -e

请注意,当您运行 sudo crontab 时,您将编辑 root 用户的 cron 作业。这是推荐的,因为如果您为自己的用户设置 cron,它们可能无法正确执行,特别是如果您的 sudo 配置需要密码验证。

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

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

然后插入以下行:

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/

成功执行将显示以下输出:

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 复制。

复制不仅对可扩展性有用,而且对当前主题也很重要。复制允许您在从故障中恢复主 MongoDB 服务器时,从从属 MongoDB 服务器中无间断地运行 MongoDB 服务。复制的一部分还是操作日志(oplog),它记录修改数据的所有操作。您可以使用此日志,就像在 MySQL 中使用二进制日志一样,在最后一次备份之后恢复数据。请记住,备份通常在夜间进行,如果您决定在晚上恢复备份,您将错过自上次备份以来的所有更新。


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
17天前
|
弹性计算 关系型数据库 数据库
自建数据库迁移到云数据库实操
本课程详细介绍了自建数据库迁移到阿里云RDS的实操步骤。主要内容包括:创建实例资源、安全设置、配置自建的MySQL数据库、数据库的迁移、从自建数据库切换到RDS以及清理资源。通过这些步骤,学员可以掌握如何将自建数据库安全、高效地迁移到云端,并确保应用的正常运行。
100 26
|
10天前
|
弹性计算 关系型数据库 数据库
从自建到云端,数据库迁移全攻略
本文详细介绍了将自建数据库迁移至阿里云RDS的全过程,涵盖WordPress网站安装、数据库迁移配置及验证等步骤。通过DTS数据传输服务,实现库表结构、全量和增量数据的无缝迁移,确保业务连续性和数据一致性。方案具备零成本维护、高可用性(最高99.99%)、性能优化及全面的数据安全保障等核心优势。此外,提供了详细的图文教程,帮助用户快速上手并完成迁移操作,确保业务稳定运行。点击文末“阅读原文”了解更多详情及参与活动赢取精美礼品。
|
16天前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
53 15
|
1月前
|
弹性计算 安全 关系型数据库
活动实践 | 自建数据库迁移到云数据库
通过阿里云RDS,用户可获得稳定、安全的企业级数据库服务,无需担心数据库管理与维护。该方案使用RDS确保数据库的可靠性、可用性和安全性,结合ECS和DTS服务,实现自建数据库平滑迁移到云端,支持WordPress等应用的快速部署与运行。通过一键部署模板,用户能迅速搭建ECS和RDS实例,完成数据迁移及应用上线,显著提升业务灵活性和效率。
|
17天前
|
运维 关系型数据库 MySQL
自建数据库迁移到云数据库RDS
本次课程由阿里云数据库团队的凡珂分享,主题为自建数据库迁移至云数据库RDS MySQL版。课程分为四部分:1) 传统数据库部署方案及痛点;2) 选择云数据库RDS MySQL的原因;3) 数据库迁移方案和产品选型;4) 线上活动与权益。通过对比自建数据库的局限性,介绍了RDS MySQL在可靠性、安全性、性价比等方面的优势,并详细讲解了使用DTS(数据传输服务)进行平滑迁移的步骤。此外,还提供了多种优惠活动信息,帮助用户降低成本并享受云数据库带来的便利。
|
24天前
|
存储 NoSQL 关系型数据库
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
我们的风控系统引入阿里云数据库MongoDB版后,解决了特征类字段灵活加减的问题,大大提高了开发效率,极大的提升了业务用户体验,获得了非常好的效果
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
|
2月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
140 3
|
2月前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
60 3
|
1月前
|
安全 关系型数据库 MySQL
体验自建数据库迁移到云数据库RDS,领取桌面置物架!
「技术解决方案【Cloud Up 挑战赛】」正式开启!本方案旨在帮助用户将自建数据库平滑迁移至阿里云RDS MySQL,享受稳定、高效、安全的数据库服务,助力业务快速发展。完成指定任务即可赢取桌面置物架等奖励,限量供应,先到先得。活动时间:2024年12月3日至12月31日16点。