以下是通过 mongosync
实现单节点 MongoDB A 到单节点 B 的数据同步的具体步骤,结合核心操作和注意事项整理:
🔧 一、同步场景与命令示例
根据需求选择以下模式:
1. 全量同步(首次迁移)
复制 A 节点所有数据到 B(不包含实时变更):
bash
mongosync -h A_IP:27017 --to B_IP:27020
适用场景:初始数据迁移,无需同步后续变更。
-
增量同步(追加变更)
仅同步指定时间点后的数据(需先获取起始时间戳t_start
):
bash mongosync -h A_IP:27017 --to B_IP:27020 --oplog -s t_start
示例:
bash mongosync -h 10.0.4.91:27017 --to 10.0.4.91:27020 --oplog -s 1369406664,1
注意:时间戳通过db.oplog.rs.find().sort({$natural:-1}).limit(1)
获取。 -
全量 + 增量 + 实时同步(持续同步)
先全量复制,再持续同步新增数据(类似tail -f
):
bash mongosync -h A_IP:27017 --to B_IP:27020 --oplog
特点:同步期间新写入 A 的数据自动同步到 B 。
⚙️ 二、配置文件使用(可选)
通过 JSON 配置文件管理复杂参数(如认证信息):
1. 创建 config.json
,写入以下内容:
{
"src": {
"host": "A_IP",
"port": 27017,
"username": "admin", // 若启用认证
"password": "passwordA"
},
"dst": {
"host": "B_IP",
"port": 27020,
"username": "admin",
"password": "passwordB"
}
}
- 启动同步:
mongosync -f config.json # 全量同步
mongosync -f config.json --oplog # 全量+增量+实时
📝 三、操作步骤详解
- 环境准备
- 在 A、B 节点启用 Oplog(单节点需配置为副本集模式 )。
-
安装
mongosync
:bash sudo apt-get install mongosync # Linux
-
启动同步
- 根据场景选择上述命令,例如实时同步:
bash mongosync -h A_IP:27017 --to B_IP:27020 --oplog
-
监控状态(输出同步进度与日志):
bash mongosync -f config.json -s status.json # 状态保存到文件
-
验证数据一致性
- 比对集合数量:
javascript use db_name; db.stats()
- 抽查关键数据:
javascript db.collection.find().sort({_id:-1}).limit(10)
⚠️ 四、关键注意事项
- 权限与安全
- 若启用认证,需在配置文件中提供用户名和密码 。
-
生产环境建议使用 TLS 加密传输(配置文件支持
tls=true
参数)。 -
性能与稳定性
- Oplog 大小:确保 A 节点的 Oplog 可覆盖同步周期(至少 24 小时),避免增量同步中断 。
- 资源占用:全量同步时 A 节点 CPU/磁盘 I/O 可能飙升,建议低峰期操作。
-
网络延迟:跨机房同步时,高延迟可能导致增量同步滞后。
-
故障处理
- 同步中断:重新执行命令会基于断点续传(依赖 Oplog 连续性)。
- 数据不一致:终止同步后清理 B 节点数据,重新全量同步。
常见问题 | 解决方案 |
---|---|
Oplog 不足导致同步失败 | 扩大 A 节点 Oplog 大小:db.adminCommand({replSetResizeOplog: 1, size: 10240}) |
认证失败 | 检查配置文件中的用户名/密码,确保账号有 read 权限(A 节点)和 readWrite 权限(B 节点) |
同步延迟高 | 减少并发写入;升级网络带宽;调整 mongosync 的批处理参数(需查文档) |
💎 总结
- 简单迁移 → 全量同步命令(无
--oplog
参数)。 - 零停机迁移 → 全量+增量+实时同步(
--oplog
)。 - 精细化控制 → 配置文件 + 时间戳范围同步。
执行前务必备份数据,并在测试环境验证。若需同步分片集群或跨版本迁移(如 MongoDB → TokuMX),需额外配置路由条件 。