# MongoDB

UDTS 支持 MongoDB（自建/UDB MongoDB/其它云厂商提供的标准MongoDB服务）单节点、副本集、分片集之间的相互迁移。

源目数据库版本支持 3.0 至 6.0。由于跨版本特性兼容问题，不支持跨大版本迁移。例如，从3.x迁移到5.x时，需要创建4.x版本的中转库，先从3.x迁移到4.x，再从4.x迁移到5.x。

## 功能限制

1. 不迁移系统内置库，config/local/admin
2. 当源或者目标MongoDB版本低于3.6时，增量迁移不支持DDL
3. 当源库为分片集群时，增量迁移不支持DDL
4. 增量迁移源库必须开启oplog

### 副本集的迁移
1. 当源库地址是单地址时，源库集群发生主从切换之后，任务暂时可以运行，但任务失败/停止后重启时无法启动
2. 当目标库地址是单地址时，目标库集群发生主从切换之后，任务可能运行异常，任务失败/停止后重启时无法启动
3. 源库/目标库是副本集时，推荐在地址处同时填写主备地址， 如 `primary:port,secondary:port` 。 这样源库/目标库发生主从切换之后，任务会自动切换到新的`primary`节点继续运行
4. 源库/目标库为 UMongoDB NVMe型 时，填写访问地址中所有地址。

### 分片集群的迁移

1. 源库为分片集群时需要填写 mongos地址，所有分片地址，以及Config Server节点地址。
2. 目标为分片集时，迁移地址需要填写mongos路由地址
3. 在迁移前需要关闭源库Balancer
4. 清理源库中的孤儿文档，防止迁移时遇到id冲突的问题
5. 当源库和目标库都是分片集群时，那么也将默认同时迁移源库中的片键

## 注意事项

1. MongoOplogTs需填写UTC时间（与CST时间差8小时），例如：期望同步点为北京时间`2021-03-01 20:10:10`时，应填写`2021-03-01T12:10:10Z`
2. UDB MongoDB 副本集填写示例，填写所有地址  
<!-- image-todo -->
3. 跨版本迁移时，请注意源库中是否存在与目标库不兼容的特性

## MongoDB填写表单

### 源为副本集或者单节点表单填写说明

| 参数名   | 说明                                                         |
| -------- | ------------------------------------------------------------ |
| 地址      | 提供内网地址，外网地址，专线地址三种方式，内网地址需要填写VPC和子网信息，外网地址支持ip和域名两种。<BR/>副本集填写所有节点地址，如: `192.168.1.100:27017,192.168.1.120:27017,192.168.1.130:27017` |
| 授权DB      |授权数据库名  ，UDB MongoDB默认为admin|
| Collection       | 集合， MongoDB 文档组，若不填，默认为迁移指定库中的所有集合；指定一个集合传输，请填写集合名；指定多个集合传输，依次输入多个集合名，集合名之间使用英文逗号隔开 |
| 数据库名 | MongoDB数据库名称。传输全库（系统库除外）请填写 * ；指定一个数据库传输，请填写数据库名；指定多个数据库传输，依次输入多个数据库名，库名之间使用英文逗号隔开。 |
| 用户名   | MongoDB连接用户名                                              |
| 密码     | MongoDB数据库对应用户密码                                      |
| MongoOplogTs | （仅增量任务需填写）增量开始的oplog位置，即增量同步点，格式为`1970-01-01T00:00:00Z`（UTC time） |


### 源为分片集表单填写说明

| 参数名   | 说明                                                         |
| -------- | ------------------------------------------------------------ |
| 数据节点IP与端口  | 分片集源库填写所有分片的地址，每个分片填写一行，如：`192.168.1.100:27017,192.168.1.120:27017,192.168.1.130:27017` <BR/>多分片请换行填写，如三分片填写三行: <BR/>`192.168.1.100:27017,192.168.1.120:27017,192.168.1.130:27017`<BR/>`192.168.1.101:27017,192.168.1.121:27017,192.168.1.131:27017`<BR/>`192.168.1.102:27017,192.168.1.122:27017,192.168.1.132:27017`|
| 路由节点地址  | 分片集群的mongos 地址， 如: `192.168.2.126:27017,192.168.2.136:27017` |
| 配置节点地址  | 分片集群的Config server 地址， 如: `192.168.1.200:27017,192.168.1.220:27017,192.168.1.230:27017` |
| 授权DB      |授权数据库名  ，UDB MongoDB默认为admin|
| Collection       | 集合， MongoDB 文档组，若不填，默认为迁移指定库中的所有集合；指定一个集合传输，请填写集合名；指定多个集合传输，依次输入多个集合名，集合名之间使用英文逗号隔开 |
| 数据库名 | MongoDB数据库名称。传输全库（系统库除外）请填写 * ；指定一个数据库传输，请填写数据库名；指定多个数据库传输，依次输入多个数据库名，库名之间使用英文逗号隔开。 |
| 用户名   | MongoDB连接用户名  (相同用户名密码填写此项，各角色不同请分别填写)                                           |
| 密码     | MongoDB数据库对应用户密码    (相同用户名密码填写此项，各角色不同请分别填写)                                  |



### 目标为副本集或分片集表单填写

| 参数名   | 说明                                                         |
| -------- | ------------------------------------------------------------ |
| 地址      | 提供内网地址。 <BR/>副本集填写所有节点地址，如: `192.168.1.100:27017,192.168.1.120:27017,192.168.1.130:27017` <BR />分片集填写mongos路由地址, 如：`192.168.1.100:27017,192.168.1.120:27017` |
| 授权DB   |授权数据库名  ，UDB MongoDB默认为admin|
| 用户名   | MongoDB连接用户名                                              |
| 密码     | MongoDB数据库对应用户密码                                      |
