MongoDb向复制集导入数据

复制集简介

复制集是MongoDB的一种高可用的方案,即有多个MongoDB节点构成的一个架构,其节点数必须为单数,且节点数不能少于3个。必须包含一个主节点,一个副节点,还有一个仲裁节点。

子节点会自动从主节点同步数据过来,当主节点挂掉时候,会从副节点中选举一个新的主节点出来,然后继续对外服务!这样保证了MongoDB的高可用性!

如何导入数据

MongoDb提供了一个mongorestore的工具,来帮助我们还原数据。假如我们要向复制集导入数据,必须要向主节点导入数据。

在mongo shell中执行如下命令:

1
mongorestore --host=mongodb://127.0.0.1:27017 -u=test -p=xxxxx -d=test -c=materiallibraries --writeConcern='{ w: 1, wtimeout: 5000 }' ./dump/tmp/materiallibraries.bson

mongorestore也提供了uri的方式,但是无论我怎么修改uri都会报错!

1
Failed: error parsing write concern: cannot specify writeConcern string and connectionString object

writeConcern 写入策略选项

MongoDB支持的WriteConncern选项如下

  1. w: 数据写入到number个节点才向用客户端确认

    • {w: 0} 对客户端的写入不需要发送任何确认,适用于性能要求高,但不关注正确性的场景
    • {w: 1} 默认的writeConcern,数据写入到Primary就向客户端发送确认
    • {w: “majority”} 数据写入到副本集大多数成员后向客户端发送确认,适用于对数据安全性要求比较高的场景,该选项会降低写入性能
  2. j: 写入操作的journal持久化后才向客户端确认
    默认为”{j: false},如果要求Primary写入持久化了才向客户端确认,则指定该选项为true

  3. wtimeout: 写入超时时间,仅w的值大于1时有效。
    当指定{w: }时,数据需要成功写入number个节点才算成功,如果写入过程中有节点故障,可能导致这个条件一直不能满足,从而一直不能向客户端发送确认结果,针对这种情况,客户端可设置wtimeout选项来指定超时时间,当写入过程持续超过该时间仍未结束,则认为写入失败。