(一)直接复制data目录(需要停止源和目标的mongo服务)
1.针对目标mongo服务已经存在,并正在运行的(mongo2-->mongo)。
执行步骤:
(1).停止源/目标服务器的mongo服务。
mongod --dbpath /usr/local/mongodb/data/db --logpath /usr/local/mongodb/logs/mongodb.log --shutdown
mongod --dbpath /usr/local/mongodb/data/db2 --logpath /usr/local/mongodb/logs/mongodb2.log --shutdown
(2).删除目标mongo服务的数据目录
rm -rf /usr/local/mongodb/data/db
(3).将待备份的mongo数据目录复制到目标服务绑定的数据目录
cp -r /usr/local/mongodb/data/db2 /usr/local/mongodb/data/db
(4).启动目标mongo服务
mongod -f /usr/local/mongodb/mongodb.conf
2.对于目标mongo为新增,未启动的(mongo-->mongo3)
(1).新增配置文件
cp mongodb2.conf mongodb3.conf。
然后修改相应的端口和数据目录
(2).将待备份的mongo数据目录复制到新mongo的数据目录
cp -r /usr/local/mongodb/data/db /usr/local/mongodb/data/db3
(3).启动mongo服务

(二)通过mongodump、mongorestore同步
参数解释
-h host,填写ip地址加上端口号
-u username, mongo的用户名
-p passwd,mongo的密码
-d database,mongo的数据库名
-c collection,mongo的数据表名
-q query,mongo的查询条件
-o output,mongodump数据存放位置
--forceTableScan 强制扫描整个表(解决版本不一致问题)
mongodump到库级别,mongodump database1 database2两个库
mongodump -h host:port -u username -p passwd --authenticationDatabase admin -d database1 database2 -o /mongotest --forceTableScan
mongodump到表级别,mongodump database1 的database1col表
mongodump -h host:port -u username -p passwd --authenticationDatabase admin -d database1 -c database1col -o /mongotest --forceTableScan
mongodump到具体查询条件,mongodump database1 的database1col表中id>1000的数据
mongodump -h host:port -u username -p passwd --authenticationDatabase admin -d database1 -c database1col -q {"id":{$gte:1000}} -o /mongotest --forceTableScan
mongorestore到库级别,mongorestore database1库
mongorestore -h host:port -u username -p passwd --authenticationDatabase admin -d database1 /mongotest/database1
mongorestore到表级别,mongorestore database1 的database1col表
mongorestore -h host:port -u username -p passwd --authenticationDatabase admin -d database1 -c database1col -o /mongotest/database1/database1col.bson --forceTableScan

(三) 通过db.copyDatabase实现
1.去源机器的源数据库新建一个账户(跟在admin新建的一致就行,每个数据库都需要新建一个)
mongo host:port -u username -p passwd --authenticationDatabase admin
use admin
db.createUser({user:'testuser',pwd:'testpass',roles:['userAdminAnyDatabase']})
use database1(即将复制的库)
db.createUser({user:'testuser',pwd:'testpass',roles:['readWrite']})
2.登录目标机器
mongo host:port -u username -p passwd --authenticationDatabase admin
3.执行复制命令
//需要用到源机器的ip\端口\库名,目标机器--需要新增的库名\新建的用户名\密码
db.copyDatabase("database1","database1","host:port","testuser","testpass","SCRAM-SHA-1")

三种方案的优缺点
方案一
优点:数据快,特别是对于数据量比较大的库,速度优势更明显。不会产生中间数据。
缺点:需要停止服务
方案二
优点:速度相对于第三种更快。支持的版本更丰富(3,4都支持)。不需要停服务。
缺点:不会同步索引。会产生中间数据,需要额外的磁盘来存储。
方案三
优点:会同步索引。不会产生中间数据。不需要停服务
缺点:版本4不支持。速度较慢。

mongo数据同步的三种方案的更多相关文章

  1. [币严区块链]ETH搭建节点区块数据同步的三种模式:full、fast、light

    ETH  全节点Archive(归档)模式数据量增长图 上述图表可通过链接查看:https://etherscan.io/chartsync/chainarchive 通过上表,可以看到截止2019年 ...

  2. MySQL冗余数据的三种方案

    一,为什么要冗余数据 互联网数据量很大的业务场景,往往数据库需要进行水平切分来降低单库数据量. 水平切分会有一个patition key,通过patition key的查询能够直接定位到库,但是非pa ...

  3. [SQL]用于提取组内最新数据,左连接,内连接,not exist三种方案中,到底谁最快?

    本作代码下载:https://files.cnblogs.com/files/xiandedanteng/LeftInnerNotExist20191222.rar 人们总是喜欢给出或是得到一个简单明 ...

  4. SP避免Form重复提交的三种方案

    SP避免Form重复提交的三种方案  1) javascript ,设置一个变量,只允许提交一次.   <script language="javascript">  ...

  5. 【Win 10 应用开发】文件读写的三种方案

    本文老周就跟伙伴们探讨一下关于文件读写的方法.总得来说嘛,有三种方案可以用,而且每种方案都各有特色,也说不上哪种较好.反正你得记住老祖宗留给我们的大智慧——事无定法,灵活运用者为上. OK,咱们开始吧 ...

  6. 实现web数据同步的四种方式

    http://www.admin10000.com/document/6067.html 实现web数据同步的四种方式 1.nfs实现web数据共享 2.rsync +inotify实现web数据同步 ...

  7. [Linux]三种方案在Windows系统下安装ubuntu双系统(转)

    在学习linux的过程中,ubuntu无疑是初学者的最佳选择. 下面来列举给Windows系统安装ubuntu双系统的三种方法. 一.虚拟机安装(不推荐) 使用工具:Vmware 如果不是因为迫不得已 ...

  8. 三种方案在Windows系统下安装ubuntu双系统

    一.虚拟机安装(不推荐) 使用工具:Vmware 如果不是因为迫不得已,比如Mac OS对硬件不兼容,Federa安装频繁出错,各种驱动不全等等,不推荐使用虚拟机安装. 个人感觉这是一种对操作系统的亵 ...

  9. Spring-Boot-操作-Redis,三种方案全解析!

    在 Redis 出现之前,我们的缓存框架各种各样,有了 Redis ,缓存方案基本上都统一了,关于 Redis,松哥之前有一个系列教程,尚不了解 Redis 的小伙伴可以参考这个教程: Redis 教 ...

随机推荐

  1. 自动装箱与自动拆箱——JavaSE基础

    自动装箱与自动拆箱 自动装箱与拆箱就是编译器蜜糖(Compiler Sugar) Integer a = 234; // 自动装箱,实际上是Integer a = Integer.valueOF(23 ...

  2. stm32f103ve+BH1750使用教程+oled(HAL库)

    1.硬件:BH1750模块+oled 2.代码:BH1750是标准的iic协议的外设,我这里单独有iic的文件,之后想要实现多个设备共用一个iic. BH1750.c 1 #include " ...

  3. 【SignalR全套系列】之在.Net Core 中实现SignalR实时通信

    ​ 微信公众号:趣编程ACE 关注可了解更多的.NET日常实战开发技巧,如需源码 请公众号后台留言 源码 [如果觉得本公众号对您有帮助,欢迎关注] 前文回顾 [SignalR全套系列]之在.NetCo ...

  4. 商户编号[Merchant Id]是什么

    1. Merchant Id是什么 2. Merchant Id 是有哪几个部分构成的 2.1 收单机构代码 2.2 商户地区代码 2.3 Merchant Category Code(MCC) 本文 ...

  5. 将 Ubuntu 16.04 LTS 的 Unity 启动器移动到桌面底部命令

    将 Ubuntu 16.04 LTS 的 Unity 启动器移动到桌面底部命令: gsettings set com.canonical.Unity.Launcher launcher-positio ...

  6. 技术分享 | 一步一步学测试平台开发-Vue restful请求

    本文节选自霍格沃兹测试学院内部教材 一般在构建应用时需要访问后端的 API 接口获取后端数据并展示.做这件事的方法有很多种(比如 axios,vue-resource,fetch-jsonp),使用 ...

  7. React + Typescript领域初学者的常见问题和技巧

    React + Typescript领域初学者的常见问题和技巧 创建一个联合类型的常量 Key const NAME = { HOGE: "hoge", FUGA: "f ...

  8. 文件输入输出处理-File

    大佬的理解-><IO流和File> 1.File类 File类是IO包中唯一代表磁盘文件本身的对象,File类定义了一些与平台无关的方法来操作文件.通过调用File类提供的各种方法, ...

  9. CVE-2021-3156漏洞复现

    CVE-2021-3156linux sudo 权限提升 版本ubantu18.04 使用这个命令可以是普通用户直接提升至管理员权限. 手动测试终端输入 sudoedit -s / 不知道什么原因ub ...

  10. 实现领域驱动设计 - 使用ABP框架 - 什么是领域驱动设计?

    前言: 最近看到ABP官网的一本电子书,感觉写的很好,翻译出来,一起学习下 (Implementing Domain Driven Design) https://abp.io/books DDD简介 ...