一 MongoDB备份

1.1 备份概述

mongodb数据备份和还原主要分为二种,一种是针对于库的mongodump和mongorestore,一种是针对库中表的mongoexport和mongoimport。
mongodump备份的原理是通过一次查询获取当前服务器快照,并将快照写入磁盘中,因此这种方式保存的也不是实时的。在获取快照后,服务器还会有数据写入,为了保证备份的安全,可以利用fsync锁使服务器数据暂时写入缓存中。
mongodb备份恢复方式通常有以下三种:
  1. 文件快照方式
  2. 复制数据文件方式
  3. 使用mongodump和mongorestore方式

1.2 文件快照方式

此方式相对简单,需要系统文件支持快照和mongod必须启用journal。可以在任何时刻创建快照。
恢复时,确保没有运行mongod,执行快照恢复操作命令,然后启动mongod进程,mongod将重放journal日志。

1.3 复制数据文件方式

直接拷贝数据目录下的一切文件,但是在拷贝过程中必须阻止数据文件发生更改。因此需要对数据库加锁,以防止数据写入。
 > db.fsyncLock()		#锁定,将阻塞写入操作,并将脏数据刷新到磁盘上,确保数据一致。
# cp -R /data/db/* /backup #拷贝数据文件到备份目录下
> db.fsyncUnlock() #文件复制完成后,对数据库进行解锁,允许写操作
 
注意: 在执行db.fsyncLock()和db.fsyncUnlock()时,不能关闭当前的shell窗口,否则可能无法连接而需要重新启动mongod服务。
恢复时,确保mongod没有运行,清空数据目录,将备份的数据拷贝到数据目录下,然后启动mongod
 # cp -R /backup/* /data/db/
# mongod -f mongod.conf
 

1.4 mongodump数据备份

在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。
mongodump命令可以通过参数指定导出的数据量级转存的服务器。
语法格式:
 > mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径
参数解释:
参数
全称
默认值
参考释义
 
--help
 
查看mongodump命令的使用帮助
 
--version
 
返回mongodump的版本号
-h
--host <hostname><:port>
localhost:27017
指定mongod要连接的主机名及端口号
-u
--username <username>
 
指定用于向开启认证的MongoDB数据库的用户名,与--password和--authenticationDatabase结合使用。
-p
--password <password>
 
指定用于向使用认证的MongoDB数据库的密码,与--username和 --authenticationDatabase选项结合使用。
-d
--db <database>
 
指定要备份的数据库。如果不指定,mongodump会将此实例中的所有数据库备份。
-c
--collection <collection>
 
指定要备份的集合。如果不指定,则会将指定数据库或实例中的所有集合备份。
 
--gzip
 
压缩输出,如果mongodump指定导出到目录,则该选项会将每个文件都压缩,并添加.gz后缀;
如果mongodump指定导出到文档或标准输出流,则该选项会压缩到文档或输出流中。
-o
--out <path>
 
指定导出数据的目录路径,如不指定,则mongodump默认将文件输出到dump所在的工作目录中。该选项不能和--archive一起使用
提示:
如果没有用户谁,可以去掉-u和-p;
如果导出本机的数据库,可以去掉-h;
如果是默认端口,可以去掉--port;
如果想导出所有数据库,可以去掉-d。
fsyncLock与mongodump不能一起使用,如果数据库被锁定了,mongodump将永远挂起。使用mongodump备份比较慢。通常mongodump用来备份单个数据库、集合、子集合。

1.5 mongorestore数据恢复

在Mongodb中我们使用mongorestore命令来恢复MongoDB数据。该命令可以从指定目录恢复相应数据。
语法格式:
 > mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 <path> --dir 文件存在路径
参数解释:
参数
全称
默认值
参考释义
 
--help
 
查看mongorestore命令的使用帮助
 
--version
 
返回mongorestore的版本号
-h
--host <hostname><:port>
localhost:27017
指定mongod要连接的主机名及端口号
-u
--username <username>
 
指定用于向开启认证的MongoDB数据库的用户名,与--password和--authenticationDatabase结合使用。
-p
--password <password>
 
指定用于向使用认证的MongoDB数据库的密码,与--username和 --authenticationDatabase选项结合使用。
-d
--db <database>
 
指定需要恢复的数据库实例。可以和备份时的数据库名称不一样。
-c
--collection <collection>
 
指定要备份的集合。如果不指定,则会将指定数据库或实例中的所有集合备份。
 
<path>
 
mongorestore 最后的一个参数,设置备份数据实例所在位置。
 
--dir <path>
 
指定备份数据所在的目录路径。
 
--drop
 
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,备份后至恢复操作中间时间段添加修改的数据都会被删除,慎用!
注意:不能同时指定 <path> 和 --dir 选项。

二 mongodump备份实例

2.1 模拟插入数据

 [root@client ~]# mongo --host 172.24.8.71 -u admin -p admin
> use admin
> db.grantRolesToUser( "admin",[{ role: "dbOwner",db:"mydb" }])
> db.grantRolesToUser( "admin",[{ role: "restore",db:"admin" }])
> db.grantRolesToUser( "admin",[{ role: "backup",db:"admin" }])
> use mydb
> for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"jack"+i})}
 

2.2 备份所有数据

 [root@client ~]# mongodump --host 172.24.8.71 -u admin -p admin -o allbackup/

2.3 备份指定数据

 [root@client ~]# mongodump --host 172.24.8.71 -d mydb -u admin -p admin -o mydbbackup/ --authenticationDatabase admin

2.4 备份指定集合

 [root@client ~]# mongodump --host 172.24.8.71 -d mydb -c user -u admin -p admin -o usercobackup/ --authenticationDatabase admin
提示:严格来说,备份只需要读权限即可。

三 mongorestore还原实例

3.1 恢复所有数据库

 [root@client ~]# mongorestore --host 172.24.8.71 -u admin -p admin --dir allbackup/

3.2 恢复指定数据

 [root@client ~]# mongorestore --host 172.24.8.71 -d mydb -u admin -p admin --dir mydbbackup/mydb/ --authenticationDatabase admin

3.3 恢复指定集合

 [root@client ~]# mongorestore --host 172.24.8.71 -d mydb -c user -u admin -p admin --dir usercobackup/mydb/user.bson --authenticationDatabase admin
提示:严格来说,恢复只需要读写权限即可。

四 mongoexport导出

4.1 mongoexport导出

参数
全称
默认值
参考释义
 
--help
 
查看mongoexport命令的使用帮助
 
--version
 
返回mongoexport的版本号
-h
--host <hostname><:port>
localhost:27017
指定mongod要连接的主机名及端口号
-u
--username <username>
 
指定用于向开启认证的MongoDB数据库的用户名,与--password和--authenticationDatabase结合使用。
-p
--password <password>
 
指定用于向使用认证的MongoDB数据库的密码,与--username和 --authenticationDatabase选项结合使用。
-d
--db <database>
 
指定需要导出的数据库实例。
-c
--collection <collection>
 
指定要导出的集合。
-f
--fields <field1[,field2]>
 
指定导出时只导出一个或多个字段,导出多个时,需要使用逗号分隔;
-q
--query <JSON>
 
提供查询文档作为导出数据源
 
--type<string>
json
指定要导出的文件类型,可选值:json,csv
-o
--out <file>
 
指定要导出的文件路径(含文件名),如果不指定,则会导出为标准输出(例如stdout)

4.2 导出指定数据库集合

 [root@client ~]# mongoexport --host 172.24.8.71 -d mydb -c user -u admin -p admin -o allexport/myuser.json --authenticationDatabase admin

五 mongoimport导入

5.1 mongoimport导出

参数
全称
可选值
参考释义
 
--help
 
查看mongoimport命令的使用帮助
 
--version
 
返回mongoimport的版本号
-h
--host <hostname><:port>
localhost:27017(默认值)
指定mongod要连接的主机名及端口号
-u
--username <username>
 
指定用于向开启认证的MongoDB数据库的用户名,与--password和--authenticationDatabase结合使用。
-p
--password <password>
 
指定用于向使用认证的MongoDB数据库的密码,与--username和 --authenticationDatabase选项结合使用。
-d
--db <database>
 
指定需要导入的数据库实例。
-c
--collection <collection>
 
指定要导入的集合。
 
--file <path>
 
指定导入数据所在的目录路径。
 
--drop
 
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用!
 
--headerline
 
使用第一行作为字段名称
 
--ignoreBlanks
 
忽略要导入文件中的空字段,如果不指定该参数,则默认会读取空字段并创建
 
--type <json|csv|tsv>
json(默认值),csv,tsv
要导入的文件类型,另外支持tsv
 
--mode <insert|upsert|merge>
insert(插入),
upsert(替换数据库中的文档),
merge(合并)
指定导入过程中,如何应对数据库文档与导入文件中的文档匹配
(默认会使用_id字段对比)的情况

5.2 导入指定数据库集合

 [root@client ~]# mongoimport --host 172.24.8.71 -d mydb -c user -u admin -p admin --file allexport/myuser.json --authenticationDatabase admin

六 复制集和分片备份恢复

参考:https://blog.csdn.net/zhu_tianwei/article/details/44514673

七 其他备份方式

7.1 脚本备份

 #!/bin/sh
DUMP=mongodump
OUT_DIR=/data/backup/mongod/tmp // 备份文件临时目录
TAR_DIR=/data/backup/mongod // 备份文件正式目录
DATE=`date +%Y_%m_%d_%H_%M_%S` // 备份文件将以备份时间保存
DB_USER=<USER> // 数据库操作员
DB_PASS=<PASSWORD> // 数据库操作员密码
DAYS=14 // 保留最新14天的备份
TAR_BAK="mongod_bak_$DATE.tar.gz" // 备份文件命名格式
cd $OUT_DIR // 创建文件夹
rm -rf $OUT_DIR/* // 清空临时目录
mkdir -p $OUT_DIR/$DATE // 创建本次备份文件夹
$DUMP -u $DB_USER -p $DB_PASS -o $OUT_DIR/$DATE // 执行备份命令
tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE // 将备份文件打包放入正式目录
find $TAR_DIR/ -mtime +$DAYS -delete // 删除14天前的旧备份
chmod +x ~/crontab/mongod_bak.sh
vi /etc/crontab
0 2 * * * root ~/crontab/mongod_bak.sh
 
 
参考链接:https://blog.csdn.net/zhu_tianwei/article/details/44514673
https://brickyang.github.io/2017/03/02/Linux-%E8%87%AA%E5%8A%A8%E5%A4%87%E4%BB%BD-MongoDB/
https://segmentfault.com/a/1190000006236494

010.MongoDB备份恢复的更多相关文章

  1. MongoDB 备份恢复

    备份: mongodump --host -u admin -p -o /tmp/alldb/ // 备份所有的库 mongodump --host -u admin -p -d mydb -o /t ...

  2. MongoDB备份恢复与导出导入

    说明:本文所有操作均在win7下的MongoDB3.4.4版本中进行. 一.备份与恢复 1. 备份: mongodump -h IP --port 端口 -u 用户名 -p 密码 -d数据库 -o 文 ...

  3. mongodb备份恢复,数据导入导出

    数据导出 mongoexport 假设库里有一张apachelog表,里面有2 条记录,我们要将它导出 /test/mongodb/bin/mongo use wxdata switched to d ...

  4. mongodb备份恢复

    注意:在备份文件存放目录的选择上有这样一个条件,文件存放目录不管有多深,都只能有它一个文件:(即除了备份文件之外只能存在文件夹,这个条件约束其整个目录树) 数据备份 : /mongodump --ho ...

  5. mongodb集群配置及备份恢复

    Mongodb安装: 编辑/etc/yum.repos.d/mongodb.repo,添加以下: [MongoDB] name=MongoDB Repository baseurl=https://r ...

  6. mongodb 备份

    本篇文章来自于阿里云技术专家郑涔(明俨)在2018年<Redis.MongoDB.HBase大咖直播大讲堂>技术直播峰会中的分享,该分享整体由四个部分构成: 1.MongoDB备份恢复 2 ...

  7. mongodb 的备份恢复导入与导出

    导入导出 use hndb; db.s.save({name:'李四',age:18,score:80,address:'郑州'}); db.s.save({name:'李三',age:8,score ...

  8. MongoDB 备份(mongodump)恢复(mongorerstore) 导出 (Mongoexport) 导入( Mongoimport)

    MongoDB 备份(mongodump) 在Mongodb中我们使用mongodump命令来备份MongoDB数据.该命令可以导出所有数据到指定目录中. mongodump命令可以通过参数指定导出的 ...

  9. MongoDB学习(三)数据导入导出及备份恢复

    这几天想着公司要用MongoDB,自然就要用到数据导入导出,就自己学习了一下. 在Mongo学习(二)中就讲到了在bin目录下有一些工具,本篇就是使用这些工具进行数据的导入导出及备份恢复. 注意:以下 ...

随机推荐

  1. java map在JSTL EL中的小应用--<c:forEach>遍历Map<>泛型

    准 备 数 据 :(自己准备吧少年,考验你时候到了!!) /** 结构示意图: 类型: List集合 map对象 LIst集合 Person类对象 String name : int age mLis ...

  2. jvm前奏篇

    javac编译原理 源文件----->类文件 词法分析------>语法分析------>语义分析----字节码生成器------.class 文件 javap  反编译 之所以能到 ...

  3. python高阶函数——map/reduce

    python 内置了map()和reduce()函数 1.map()函数 map()函数接收两个参数,一个是函数,一个是可迭代对象Iterable,map将传入的函数依次作用于序列的每一个元素.并把结 ...

  4. JDK1.8 中的HashMap

    ​ HashMap本质上Java中的一种数据结构,他是由数组+链表的形式组织而成的,当然了在jdk1.8后,当链表长度大于8的时候为了快速寻址,将链表修改成了红黑树. ​ 既然本质上是一个数组,那我们 ...

  5. vue-cli3配置webpack-bundle-analyzer插件

    为优化vue项目性能,需要使用webpack-bundle-analyzer分析报文件,找出最占用空间的插件有哪些,对应做出优化 网上看了一些网站,有的写的太麻烦了,现将最简单的一种写出来供大家参考 ...

  6. AVAssetDownloadURLSession

    NSURLSession 的子类,用于支持创建和执行资产下载任务的URL会话,主要是用来下载HLS资源内容的 AVAssetDownloadURLSession reference https://d ...

  7. sqlplus命令窗口执行sql脚本文件

    SQL>@file_name 例如 SQL>@monitor.sql      文件须得在当前窗口所在的目录下或者指定某个路径. SQL>@D:\monitor.sql 转载示例-- ...

  8. Java8_stream的map和flatmap

    假如我们有这样一个需求给定单词列表["Hello","World"],你想要返回列表["H","e","l&q ...

  9. (day67)组件、组件化、组件传参、JS补充(命名转换、for in 、数据转换)、css取消选中和模拟小手

    目录 一.初识组件 (一)概念 (二)特点 二.组件的分类 (一)根组件 (二)局部组件 (三)全局组件 二.数据组件化 三.组件的传参 (一)父传子 (二)子传父 四.JS补充 (一)与html命名 ...

  10. Spring afterPropertiesSet方法

    1.init-method方法,初始化bean的时候执行,可以针对某个具体的bean进行配置.init-method需要在applicationContext.xml配置文档中bean的定义里头写明. ...