首页 文章资讯内容详情

MongoDB 备份与还原 mongodump、mongorestore

2026-05-31 4 花语

本文内容纲要:

-MongoDB备份与还原 -一、MongoDB备份 -1、mongodump -2、cp或者rsync -3、单节点意外关闭后,如何恢复数据 -4、查看备份数据 -二、MongoDB还原 -1、mongorestore特点 -2、mongorestore常用参数 -3、还原示例

目录

MongoDB备份与还原

一、MongoDB备份

1、mongodump

1.1、mongodump常用命令和参数 1.2、注意

2、cp或者rsync

3、单节点意外关闭后,如何恢复数据

4、查看备份数据

二、MongoDB还原

1、mongorestore特点 2、mongorestore常用参数 3、还原示例

MongoDB备份与还原

一、MongoDB备份

MongoDB备份的几种方式:

mongodump 系统快照(这里不做详细介绍,具体内容见官网:BackUpwithFilesystemSnapshots) cp或者rsync

1、mongodump

mongodump是MongoDB官方提供的备份工具,它可以从MongoDB数据库读取数据,并生成BSON文件,mongodump适合用于备份和恢复数据量较小的MongoDB数据库,不适用于大数据量备份。

默认情况下mongodump不获取local数据库里面的内容。

mongodump仅备份数据库中的文档,不备份索引,所以我们还原后,需要重新生成索引。

mongodump备份过程中会对mongod服务的性能产生影响,我们建议在业务低峰期进行操作。如果我们备份的数据,大于系统内存,我们备份的时候容易出现错误。

在执行mongodump的时候,mongod服务还是可以提供服务的,可以进行修改数据,如果我们在备份的时候加上参数--oplog的话,那么oplog是会记录这一次操作的,如果我们想在restore的时候也有日志记录,我们可以使用mongorestore--oplogReplay进行恢复

1.1、mongodump常用命令和参数

官方文档:mongodump

mongodump默认输出的目录名为dump,如果输出路径包含dump目录,会直接覆盖的。默认备份是没有压缩的。

参数:

--host<hostname><:port>,-h<hostname><:port>#指定备份的主机ip和端口号,默认值localhost:27017 --port#指定端口号默认27017 --username<username>,-u<username>#指定用户名 --password<password>,-p<password>#指定密码 --authenticationDatabase<dbname>#指定认证的数据库 --authenticationMechanism<name>#指定认证的算法,默认值SCRAM-SHA-1 --db<database>,-d<database>#指定备份的数据库,未指定的话,备份所有的数据库,但不包含local库 --collection<collection>,-c<collection>#指定备份的集合,未指定则备份指定库中的所有集合。 --query<json>,-q<json>#指定json作为查询条件。来备份我们过滤后的数据。 --queryFile<path>#指定json文档路径,以该文档的内容作为查询条件,来备份我们过滤后的数据。 --quit#通过抑制MongoDB的复制,连接等活动,来实现备份。 --gzip#开启压缩,3.2版本后可以使用,输出为文件的话会带有后缀.gz --out<path>,-o<path>#输出的目录路径 --repir#修复数据时使用下面有详细介绍 --oplog#mongodump会将mongodump执行期间的oplog日志输出到文件oplog.bson,这就意味着从备份开始到备份结束的数据操作我们都可以记录下来。 --archive<file>#输出到单个存档文件或者是直接输出。 --dumpDbUsersAndRoles#只有在使用--db时才适用,备份数据库的包含的用户和角色。 --excludeCollectionstring#排除指定的集合,如果要排除多个,使用多个--excludeCollection --numParallelCollectionsint,-jint#并行导出的集合数,默认为4 --ssl#指定TLS/SSL协议 --sslCAFilefilename#指定认证文件名 --sslPEMKeyFile<filename> --sslPEMKeyPassword<value> --sslCRLFile<filename> --sslAllowInvalidCertificates --sslAllowInvalidHostnames --sslFIPSMode

示例:

排除指定的集合

mongodump--dbtest--excludeCollection=users--excludeCollection=salaries

指定ip,端口,用户名,认证,压缩,输出目录

mongodump--hostmongodb1.example.net--port37017--usernameuser--password"pass"--gzip--out/opt/backup/mongodump-2019-04-17 1.2、注意

当我们的删除一个集合的数据,这个集合有10000条数据,那么在Oplog里面也是会有10000条删除记录。

这样的操作就会导致Oplog里面的之前的操作记录会被快速覆盖。

所以我们在备份的时候,需要注意备份的间隔时间和Oplog记录被覆盖的时间(也就是Oplog记录了多长时间的日志)。要后者大于前者。

示例:

我们的备份计划是,每天备份一次数据,Oplog记录的保持时间要大于1天。

Oplog的开启是需要开启副本集才能开启的,所以以上备份策略是针对副本集。

2、cp或者rsync

我们可以直接复制数据文件,但是我们必须在复制文件前停止对MongoDB的操作,否则我们复制的文件是无效的。

3、单节点意外关闭后,如何恢复数据

注意以下操作是针对单节点。

在意外关闭节点后,我们进行重新节点,发现有如下的日志错误:

2018-10-24T18:05:18.248-0400WSTORAGE[initandlisten]Detecteduncleanshutdown-mongod.lockisnotempty. ... 2018-10-24T17:24:53.122-0400ESTORAGE[initandlisten]Failedtogetthecursorforuri:table:collection-2-6854866147293273505 2018-10-24T17:24:53.122-0400ESTORAGE[initandlisten]Thismaybeduetomissingdatafiles.... ... ***abortingafterfassert()failure

并且在数据储存路径中有一个mongod.lock文件。

我们可以使用mongod--repair来恢复数据。

在MongoDB中4.0.3,对WiredTiger引擎,使用该命令会进行以下操作

重建所有索引 丢弃损坏的数据 为残缺的元数据创建存根文件。

对于MMAPv1引擎

重建所有索引 丢弃损坏的数据

数据恢复流程:

先备份现有的数据

我们可以用cp命令将现有的数据的整个目录的所有文件都备份一份。

使用mongod--repair

#针对所有数据库 mongod--repair #针对单个数据库 mongod--dbpath/opt/mongodb/data/djx--repair

一般情况下,你不应该手动删除该mongod.lock文件。而是,使用上述过程来恢复数据库。在严峻的情况下,您可以删除文件,使用可能损坏的文件启动数据库,并尝试从数据库中恢复数据,但这存在风险。

4、查看备份数据

我们部分的数据都是二进制的,我们直接查看是查看不到的,那么我们可以通过工具bsondump(安装MongoDB自带了)来进行查看。

[root@djxuu_dev]#bsondumporder_detail.bson 2019-04-17T16:14:51.430+0800 549objectsfound {"_id":{"$oid":"5cae98d0f23d932dscdfc2ff"}} {"_id":{"$oid":"5cae98d0f23d932dscdfca00"}} {"_id":{"$oid":"5cae98d1f23d932dscdfca31"}} {"_id":{"$oid":"5cae98d1f23d932dscdfca32"}}

二、MongoDB还原

1、mongorestore特点

mongorestore可以创建新的数据库或将数据添加到现有的数据库,但是mongorestore仅仅执行insert操作,不执行update操作。这就意味着如果将文档还原到现有的数据库,现有的数据库中的文档的_id的值和要还原的文档中的_id值是一样的,是不会将数据库原有的值覆盖的。 重建索引,mongorestore会重建索引。 mongorestore不恢复system.profile的数据

2、mongorestore常用参数

--help#查看帮助 --quiet#通过抑制MongoDB的复制,连接等活动,来实现数据恢复。 --host<hostname><:port>,-h<hostname><:port>#指定恢复的主机ip和端口号,默认值localhost:27017 --port#指定端口号默认27017 --username<username>,-u<username>#指定用户名 --password<password>,-p<password>#指定密码 --authenticationDatabase<dbname>#指定认证的数据库 --authenticationMechanism<name>#指定认证的算法,默认值SCRAM-SHA-1 --objcheck#开启验证,验证还原操作,确保没有无效的文档插入数据库。会有较小的性能影响 --oplogReplay#恢复备份数据并将mongodump执行期间的操作(记录在导出的日志)恢复。 --oplogLimit#指定恢复 --oplogFile#指定Oplog路径 --keepIndexVersion#阻止mongorestore在还原过程中将索引升级到最新版本。 --restoreDbUsersAndRoles#还原指定的数据库用户和角色。 --maintainInsertionOrder#默认值为False,如果为True,mongorestore将按照输入源的文档顺序插入,否则是随机执行插入。 --numParallelCollectionsint,-jint#指定并行恢复的集合数。 --numInsertionWorkersPerCollectionint#默认值为1,指定每个集合恢复的并发数,大数据量导入增加该值可提高恢复速度。 --gzip#从压缩文档中恢复。 --archive#从归档文件中恢复。 --dir#指定还原数据储存目录。

3、还原示例

mongorestore--collectionpeople--dbaccountsdump/ mongorestore--hostmongodb1.example.net--port37017--usernameuser--password"pass"/opt/backup/mongodump-2011-10-24 mongorestore--gzip--archive=test.20150715.gz--dbtest mongorestore--archive=test.20150715.archive--dbtest

本文内容总结:MongoDB备份与还原,一、MongoDB备份,1、mongodump,2、cp或者rsync,3、单节点意外关闭后,如何恢复数据,4、查看备份数据,二、MongoDB还原,1、mongorestore特点,2、mongorestore常用参数,3、还原示例,

原文链接:https://www.cnblogs.com/operationhome/p/10724374.html