使用Node.js实现MongoDB复制,完成AWS EC2与本地数据双向同步
前置准备:先解决本地与EC2 MongoDB的连通问题
同步功能的前提是两端数据库可互相访问,先排查解决之前的连通故障:
- 确认EC2安全组入站规则开放27017(MongoDB默认端口),仅允许你的本地公网IP访问,不要开放
0.0.0.0/0避免安全风险 - 修改EC2上MongoDB配置文件
mongod.conf,将bindIp参数从默认的127.0.0.1调整为0.0.0.0,或者追加你的本地公网IP,修改完成后重启Mongo服务:sudo systemctl restart mongod - 本地测试连通性:用Mongo shell执行
mongo "mongodb://<EC2公网IP>:27017/<你的数据库名>" -u <数据库用户名> -p <数据库密码>,确认能正常登录后再进行同步配置。
使用mongo-sync实现双向同步的步骤
该工具基于NodeJS开发,需要先在运行同步脚本的环境安装NodeJS运行时。
1. 安装依赖
执行命令安装工具包:npm install mongo-sync
2. 编写同步脚本
运行脚本的设备只要能同时访问本地Mongo和EC2上的Mongo即可,示例代码模板如下:
const MongoSync = require('mongo-sync'); // 配置两端数据库连接信息 const syncTask = new MongoSync({ // 本地MongoDB配置 local: { uri: 'mongodb://localhost:27017/本地数据库名', options: { useNewUrlParser: true, useUnifiedTopology: true } }, // EC2远程MongoDB配置 remote: { uri: 'mongodb://<EC2公网IP>:27017/远程数据库名', options: { useNewUrlParser: true, useUnifiedTopology: true } }, // 指定要同步的集合,留空则同步当前库下所有集合 collections: ['需要同步的集合1', '需要同步的集合2'], // 同步方向设为双向 direction: 'both', // 冲突解决策略:latest代表以更新时间最新的版本为准,可选值还有local(优先本地)、remote(优先远程) conflictResolution: 'latest' }); // 启动同步任务 syncTask.start() .then(() => console.log('双向同步已启动')) .catch(err => console.error('同步启动失败:', err)); // 监听同步事件和错误 syncTask.on('sync', (syncInfo) => { console.log(`集合${syncInfo.collection}同步完成,共同步${syncInfo.documents.length}条数据`); }); syncTask.on('error', (err) => { console.error('同步过程出错:', err); });
3. 注意事项
- 如果你的MongoDB开启了身份验证,连接uri需要按照
mongodb://用户名:密码@IP地址:端口/数据库名的格式填写 - 首次启动同步前,建议对两端的数据库做全量备份,避免误操作导致数据丢失:
mongodump -d <数据库名> -o <本地备份路径> - 工具默认会监听两端数据库的变更做实时增量同步,如果只需要定时同步,可以配合cron任务或者
node-schedule库设置定时触发逻辑。
4. 验证同步效果
先往本地Mongo插入一条测试数据,确认EC2端的数据库能同步到对应记录,再往EC2端的数据库插入一条测试数据,确认本地库能同步到对应记录,验证双向同步生效。
内容的提问来源于stack exchange,提问作者user16412923
相关产品推荐
相关产品推荐

