MongoDB 常用的数据备份梳理汇总
1.基于数据文件的备份
直接将原始的数据文件Copy至备份的地方,这个方法的优点是比较快,因为备份和恢复都不需要转换数据格式。缺点就是需要锁住数据库服务器,但是此方案通常备份是在从节点上进行,备份过程不影响应用的正常运行。
如果不锁住数据,经常会导致复制文件中断,另外就是保证数据文件的一致性状态。
主要命令:
加锁的命令--db.fsyncLock()
注意:锁之后的任何尝试写入都会被阻止,而且读操作也会被阻止。新的连接尝试也会被阻止。
解锁的命令--db.fsyncUnlock()
注意:这仅仅是个解锁请求,数据库可能无法正确解锁。运行db.currentOp方法可以验证数据库是否还处于锁状态。
2.mongodump
mongodump导出的是bson格式,是二进制形式。此工具对于恢复整个实例、单个数据库、指定集合都十分有用。他们可以用于备份实时运行的数据库(无需锁住或者关闭数据库)。
mongorestore用于读取恢复这些文件。
部分主要命令参数 如下:
-h [ --host ] --数据库所在主机IP地址;
–port --mongodb使用的端口号;
-u [ --username ]--登陆用户名;
-p [ --password ] --用户的登陆密码;
-d [ --db ] --准备备份的数据库;
-c [ --collection ] --准备备份的集合;
-o [ --out ] --导出数据将要保存在的目录;
-q [ --query ] --指定备份的查询条件;
–oplog --快照式备份,保证数据的时间一致性和完整性;
--authenticationDatabase --用户的登录验证数据库
--gzip --备份文件压缩
例子:
将端口为37017的MongoDB数据备份到 /opt/backup/mongodump-2011-10-24 路径下,登入验证需输入密码。
mongodump --host mongodb1.example.net --port --username user --password "pass" --out /opt/backup/mongodump---
3.mongoexport
mongoexport命令行用于数据的导出,默认导出的文件格式为JSON格式,还支持csv格式。
部分主要命令参数 如下:
-h,--host :代表远程连接的数据库地址,默认连接本地Mongo数据库;
--port:代表远程连接的数据库的端口,默认连接的远程端口27017;
-u,--username:代表连接远程数据库的账号,如果设置数据库的认证,需要指定用户账号;
-p,--password:代表连接数据库的账号对应的密码;
-d,--db:代表连接的数据库;
-c,--collection:代表连接数据库中的集合;
-f, --fields:代表集合中的字段,可以根据设置选择导出的字段;
--type:代表导出输出的文件类型,包括csv和json文件;
-o, --out:代表导出的文件名;
-q, --query:代表查询条件;
与mongodump相比,从功能上来讲,mongoexport可以细化到集合中的字段,可以根据需要只导出指定的字段。从文件格式上来看,不再是Bson格式的文件,而是直接可读的Json或CSV文件,容易被第三方程序读取利用。缺点就是备份性能减低了。
在开发的数据变更需求中,有时候 考虑到 数据的重要性和可溯性,部分需求会要求我们将数据临时备份到一个集合中,便于回滚和查询比较。这时候登录到服务器上,根据条件执行mongoexport 导出和 mongoimport 再次导入, 虽然可以实现备份的需求,但这有一个前提要求,就是有服务器登入和执行的权限,且过程还相对繁琐。如果MongodB部署在云上,上面mongoexport的备份方案就歇菜了,我们不能登入云库的物理机。此外,云上数据库虽然还可以还原实例,但代价相对较大。
相信这时候,我们会不由自主的怀念 SQL Server / MySQL 的 insert into XXXX_bak select * from XXXX。如果 MongoDB也有这种轻量级的备份该多好啊。
其实,在MongoDB的命令中,也有类似功能代码。在这里我们,我们讲解下Cursor游标和聚合框架的$out。
4.cursor.forEach()
Cursor,又称游标。
游标不是查询结果,可以理解为数据在遍历过程中的内部指针,其返回的是一个资源,或者说数据读取接口.客户端通过对游标进行一些设置就能对查询结果进行有效地控制,如可以限制查询得到的结果数量、跳过部分结果、或对结果集按任意键进行排序等。
db.collection.find()可以实现根据条件查询和指定使用投影运算符返回的字段(省略此参数返回匹配文档中的所有字段)。并返回到匹配文档的游标,可以随意修改查询限制、跳跃、和排序顺序的功能。
游标有一个重要的迭代函数---cursor.forEach(回调函数),允许我们自定义回调函数来逐个处理每个单元.
基本语法格式:
db.collection.find().forEach(<function>)
例如,我们需要修改集合QQOrder中创建时间为指定时间,状态为10的订单,因为订单数据不能轻易修改,除流程控制外,要求DBA在修改前备份一下。
以下代码是将符合条件的数据备份至QQOrder_bak集合中。
db.QQOrder.find(
{"Status" : "",
"Rec_CreateTime" : {$gt:ISODate("2018-11-18T15:37:20.740+08:00"),$lt:ISODate("2018-11-20T15:37:20.740+08:00")}
}
).forEach(
function(x){
db.QQOrder_bak.insert(x)
}
)
5.聚合框架--$out
我们知道在聚合框架中有一个步骤--$out,可以把管道的结果写入某个集合中(2.6版新增)。
使用$out操作符,可以自动把聚合管道的输出结果保存到集合里。如果集合不存在的话,则$out操作符将会创建一个集合,或者如果存在就会完全取代现有的集合。此外,如果创建新的集合失败的话,MongoDB不会修改之前的集合。
所以,针对上面的需求,使用下面的代码也可以实现。
(测试过程中,将上一个案例备份集合由QQOrder_bak替换成了QQOrder_bak_2)
db.QQOrder.aggregate([
{$match: {"Status" : "","Rec_CreateTime" : {$gt:ISODate("2018-11-18T15:37:20.740+08:00"),$lt:ISODate("2018-11-20T15:37:20.740+08:00")}}},
{$out:'QQOrder_bak_2'}
])
需要特别注意的话,QQOrder_bak_2只可以临时存放数据,如果再次执行新的导出,会将集合中原来的数据覆盖掉。
以上五种备份,可以涵盖我们日常所有的备份需求了。包含 实例、库的日常灾备,也有业务需求的临时备份。
本文版权归作者所有,未经作者同意不得转载,谢谢配合!!!
MongoDB 常用的数据备份梳理汇总的更多相关文章
- 【Mongodb教程 第十八课 】MongoDB常用命令 数据库命令 集合操作命令
面向文档的 NoSQL 数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能. 条件操作符 <, <=, >, >= 这个操作符就不用多 ...
- 【Mongodb教程 第十七课 】MongoDB常用命令 数据库命令 集合操作命令
(1)数据库命令 a)添加用户 db.addUser(‘name’,’pwd’) b)删除用户 db.removeUser(‘name’) c)用户验证 db.auth(‘name’,’pwd’) d ...
- Mongodb数据备份恢复
Mongodb数据备份恢复 一.MongoDB数据库导入导出操作 1.导出数据库 twangback为备份的文件夹 命令: mongodump -h 127.0.0.1[服务器IP] -d advie ...
- MySQL 数据库备份种类以及常用备份工具汇总
1,数据库备份种类 按照数据库大小备份,有四种类型,分别应用于不同场合,下面简要介绍一下: 1.1完全备份 这是大多数人常用的方式,它可以备份整个数据库,包含用户表.系统表.索引.视图和存储过程等所有 ...
- MongoDB 数据备份和恢复 --- MongoDB基础用法(七)
数据备份 在Mongodb中我们使用mongodump命令来备份MongoDB数据.该命令可以导出所有数据到指定目录中. mongodump命令可以通过参数指定导出的数据量级转存的服务器. mongo ...
- NoSQL 数据库案例实战 -- MongoDB数据备份、恢复
MySQL数据迁移到MongoDB数据库中 前言 一.数据备份 二.数据恢复 前言 本环境是基于 Centos 7.8 系统构建mongodb-enterprise-4.2.8学习环境具体构建,请参考 ...
- 开源服务专题之-------rsync数据备份
RSYNC是Remote Sync 远程同步的简称,与SCP的比较,SCP= 无法备份大量数据,类似windows的复制,而rsync=边复制 ,边统计,边比较,可以备份大量数据.可以镜像保存整个目录 ...
- (转)mongodb常用命令脚本化-自动化运维
mongodb常用命令脚本化-自动化运维 把一些运维中常用到的mongodb命令写成shell脚本,极大的方便了维护 1 设置副本集 #!/bin/bash#mongodb 进入client ...
- 【Mongodb】数据库操作--备份、还原、导出和导入
文章转载自点这里 mongodb数据备份和还原主要分为二种,一种是针对于库的mongodump和mongorestore,一种是针对库中表的mongoexport和mongoimport. mongo ...
随机推荐
- [Swift]LeetCode516. 最长回文子序列 | Longest Palindromic Subsequence
Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...
- oracle 合并多个sys_refcursor
一.背景 在数据开发中,有时你需要合并两个动态游标sys_refcursor. 开发一个存储过程PROC_A,这个过程业务逻辑相当复杂,代码篇幅较长.一段时间后要开发一个PROC_B,要用PROC_A ...
- python之zipfile
1 简述 zip文件是一个常用的归档和与压缩标准. zipfile模块提供了创建.读取.写入.添加及列出zip文件的工具. zipfile里有2个非常常用的class,分别是Zipfile和ZipIn ...
- 面试前必知Redis面试题—缓存雪崩+穿透+缓存与数据库双写一致问题
今天来分享一下Redis几道常见的面试题: 如何解决缓存雪崩? 如何解决缓存穿透? 如何保证缓存与数据库双写时一致的问题? 一.缓存雪崩 1.1什么是缓存雪崩? 回顾一下我们为什么要用缓存(Redis ...
- innerHTML,outerHTML,innerText,outerText
- innerHTML 设置或获取位于对象起始和结束标签内的 HTML - outerHTML 设置或获取对象及其内容的 HTML 形式 - innerText 设置或获取位于对象起始和结束标签内的文 ...
- JVM系列第12讲:JVM参数之查看JVM参数
今天要说的是如何查看 JVM 中已经设置的参数,包括显示参数和隐式参数. 打印显式参数 -XX:+PrintVMOptions 该参数表示程序运行时,打印虚拟机接受到的命令行显式参数.我们用下面的命令 ...
- 【java设计模式】(4)---工厂模式(案例解析)
设计模式之工厂模式 工厂模式分三种:简单工厂模式(也叫静态工厂模式),工厂方法模式(也叫多形性工厂),抽象工厂模式(也叫工具箱)下面会一一举例. 一.概念 1.什么是工厂模式 这种类型的设计模式属于创 ...
- NPM 安装速度慢,镜像修改
今天安装gitbook的时候,竟然花了两个小时没有安装成功,大家在使用npm安装依赖的时候速度是不是经常慢的要死?最佳解决方案是手动更改镜像服务器地址, 强烈推荐阿里巴巴在国内的镜像服务器,执行下面命 ...
- andrroid 测试那点事
1.拨号*#*#98284#*#* 2.查看imei号:拔号 *#06# 3.抓取 MTK Log *#*#3646633#*#* 高通平台 *#62564# 4.查看手机的cpu架构信息:adb s ...
- ASP.NET页面之间的几种传值方法
首先是QueryString方法传值: QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法 ...