• mongo数据同步的三种方案


    (一)直接复制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不支持。速度较慢。

  • 相关阅读:
    了解油封对汽车安全的影响?
    高并下如何做变量的自增与自减
    服务端代码
    Vue实现登录功能全套详解(含封装axios)
    【自学HTML笔记第2篇】HTML中的表格标签
    什么是分层架构
    css如何实现页面布局与五种实现方式
    Java命令行形式将程序打包成jar包
    制作一个简单HTML旅游网站(HTML+CSS+JS)无锡旅游网页设计与实现8个页面
    微信小程序——项目成员管理、小程序上传、发布步骤
  • 原文地址:https://www.cnblogs.com/mtck/p/16593211.html