首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Node.js 自动化数据迁移工具-高效同步 MySQL 与 MongoDB 数据

Node.js 自动化数据迁移工具-高效同步 MySQL 与 MongoDB 数据

原创
作者头像
百行代码
发布2025-07-22 17:11:03
发布2025-07-22 17:11:03
4270
举报
文章被收录于专栏:技术汇总专栏技术汇总专栏

Node.js 自动化数据迁移工具-高效同步 MySQL 与 MongoDB 数据

在实际业务开发中,我们常常需要将结构化数据库(如 MySQL)中的数据迁移到非结构化或半结构化数据库(如 MongoDB)中。无论是为了异构数据分析、架构调整,还是系统升级,手动迁移数据既低效又容易出错。

本文将通过一个基于 Node.js 编写的自动化数据迁移工具,展示如何高效实现 MySQL 到 MongoDB 的数据迁移,并支持灵活的字段映射配置。


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

项目背景与目标

我们需要一个能够自动化批量迁移 MySQL 表数据到 MongoDB的工具,具备以下特点:

  • 支持多数据表迁移
  • 支持字段映射与转换
  • 通过配置文件自定义迁移规则
  • 可重复运行、可扩展、可监控

技术栈选型

技术

用途

Node.js

脚本运行环境

mysql2

连接与查询 MySQL 数据库

mongoose

操作 MongoDB 的 ODM 工具

dotenv

加载环境配置

fs + yaml

加载字段映射规则


项目结构设计

代码语言:bash
复制
data-migrator/
├── config/
│   └── mapping.yaml         # 字段映射配置
├── .env                     # 环境变量配置
├── migrate.js               # 主迁移脚本
├── mysql.js                 # MySQL 查询工具
├── mongo.js                 # MongoDB 插入工具
└── utils.js                 # 工具函数

1. 配置连接信息(.env)

代码语言:env
复制
MYSQL_HOST=localhost
MYSQL_USER=root
MYSQL_PASSWORD=123456
MYSQL_DATABASE=testdb

MONGO_URI=mongodb://localhost:27017/testdb

2. 字段映射配置(mapping.yaml)

支持多表配置及字段重命名:

代码语言:yaml
复制
users:
  collection: users
  fields:
    id: _id
    username: name
    email: email
    created_at: createdAt
orders:
  collection: orders
  fields:
    id: _id
    user_id: userId
    amount: totalAmount
    created_at: createdAt

3. MySQL 工具模块(mysql.js)

代码语言:js
复制
const mysql = require('mysql2/promise');
require('dotenv').config();

const pool = mysql.createPool({
  host: process.env.MYSQL_HOST,
  user: process.env.MYSQL_USER,
  password: process.env.MYSQL_PASSWORD,
  database: process.env.MYSQL_DATABASE,
});

async function fetchTableData(table) {
  const [rows] = await pool.query(`SELECT * FROM \`${table}\``);
  return rows;
}

module.exports = { fetchTableData };

4. MongoDB 工具模块(mongo.js)

代码语言:js
复制
const mongoose = require('mongoose');
require('dotenv').config();

mongoose.connect(process.env.MONGO_URI, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

async function insertMany(collectionName, docs) {
  const Model = mongoose.model(collectionName, new mongoose.Schema({}, { strict: false }), collectionName);
  await Model.insertMany(docs);
}

module.exports = { insertMany };

在这里插入图片描述
在这里插入图片描述

5. 工具函数(utils.js)

字段映射处理逻辑:

代码语言:js
复制
function transformRow(row, fieldMap) {
  const newRow = {};
  for (const [source, target] of Object.entries(fieldMap)) {
    newRow[target] = row[source];
  }
  return newRow;
}

module.exports = { transformRow };

6. 主迁移脚本(migrate.js)

代码语言:js
复制
const fs = require('fs');
const yaml = require('js-yaml');
const { fetchTableData } = require('./mysql');
const { insertMany } = require('./mongo');
const { transformRow } = require('./utils');

// 加载字段映射配置
const mappings = yaml.load(fs.readFileSync('./config/mapping.yaml', 'utf8'));

async function migrate() {
  for (const [table, config] of Object.entries(mappings)) {
    console.log(`📥 开始迁移表: ${table}`);

    const rows = await fetchTableData(table);
    const transformed = rows.map(row => transformRow(row, config.fields));

    await insertMany(config.collection, transformed);
    console.log(`✅ 已迁移 ${rows.length} 条记录到 ${config.collection}`);
  }

  console.log('🎉 所有迁移任务完成!');
  process.exit(0);
}

migrate().catch(err => {
  console.error('❌ 迁移失败:', err);
  process.exit(1);
});

实际效果与优化建议

✅ 效果验证

  • 执行 node migrate.js,即可根据 mapping.yaml 配置批量迁移指定表。
  • 字段自动映射、日志输出清晰。
  • 支持增量同步扩展(如加字段过滤条件)。

🔧 后续优化方向

  • 加入迁移日志记录机制(如写入日志表或文件)
  • 支持断点续传(增量迁移)
  • Web 界面化迁移控制台
  • 加入任务队列与批处理优化性能
  • 支持 MongoDB 聚合或清洗中间层

总结

本文实现了一个轻量级、可扩展的 Node.js 自动化数据迁移工具,通过配置 MySQL 与 MongoDB 的连接参数和字段映射表,成功完成多个表的结构化数据向文档型数据库的转换。适用于数据备份、数据仓库构建、业务迁移等实际场景。

这类自动化脚本对于提升开发效率、降低人为错误、增强系统弹性具有重要意义。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Node.js 自动化数据迁移工具-高效同步 MySQL 与 MongoDB 数据
    • 项目背景与目标
    • 技术栈选型
  • 项目结构设计
    • 1. 配置连接信息(.env)
    • 2. 字段映射配置(mapping.yaml)
    • 3. MySQL 工具模块(mysql.js)
    • 4. MongoDB 工具模块(mongo.js)
    • 5. 工具函数(utils.js)
    • 6. 主迁移脚本(migrate.js)
  • 实际效果与优化建议
    • ✅ 效果验证
    • 🔧 后续优化方向
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档