# data-source-target **Repository Path**: liu-haijin/data-source-target ## Basic Information - **Project Name**: data-source-target - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-01 - **Last Updated**: 2026-02-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MySQL 数据迁移工具 一个使用 Go 语言实现的 MySQL 数据库数据迁移程序,支持从源数据库迁移数据到目标数据库。 ## 功能特性 - ✅ 支持配置源数据库和目标数据库 - ✅ 支持指定需要迁移的表(或迁移所有表) - ✅ 批量迁移数据,提高迁移效率 - ✅ 自动创建目标表(如果不存在) - ✅ 清晰的代码层次结构,易于维护和扩展 - ✅ 详细的迁移日志输出 ## 项目结构 ``` data-source-target/ ├── config/ # 配置管理模块 │ └── config.go # 配置结构体和加载逻辑 ├── database/ # 数据库连接模块 │ └── connection.go # 数据库连接和基础操作 ├── migration/ # 数据迁移模块 │ └── migrator.go # 迁移核心逻辑 ├── main.go # 程序入口 ├── config.yaml # 配置文件示例 ├── go.mod # Go 模块定义 └── README.md # 项目说明文档 ``` ## 安装依赖 ```bash go mod download ``` ## 配置说明 编辑 `config.yaml` 文件,配置源数据库和目标数据库信息: ```yaml # 源数据库配置 source: database: host: localhost port: 3306 user: root password: your_password database: source_db charset: utf8mb4 # 目标数据库配置 target: database: host: localhost port: 3306 user: root password: your_password database: target_db charset: utf8mb4 # 迁移配置 migration: # 需要迁移的表列表,空数组表示迁移所有表 tables: ["users", "orders"] # 批量插入大小,默认1000 batch_size: 1000 ``` ### 配置项说明 - **source**: 源数据库配置 - `host`: 数据库主机地址 - `port`: 数据库端口 - `user`: 数据库用户名 - `password`: 数据库密码 - `database`: 数据库名称 - `charset`: 字符集(默认 utf8mb4) - **target**: 目标数据库配置(配置项同源数据库) - **migration**: 迁移配置 - `tables`: 需要迁移的表列表 - 空数组 `[]` 表示迁移所有表 - 指定表名如 `["users", "orders"]` 表示只迁移这些表 - `batch_size`: 批量插入大小,默认 1000 ## 使用方法 ### 1. 使用默认配置文件 ```bash go run main.go ``` ### 2. 指定配置文件路径 ```bash go run main.go -config /path/to/config.yaml ``` ### 3. 编译后运行 ```bash # 编译 go build -o migrate main.go # 运行 ./migrate -config config.yaml ``` ## 工作流程 1. **加载配置**: 从配置文件读取源数据库、目标数据库和迁移配置 2. **建立连接**: 分别连接源数据库和目标数据库 3. **获取表列表**: 根据配置获取需要迁移的表列表 4. **逐表迁移**: - 检查目标表是否存在,不存在则创建 - 获取源表和目标表的列信息 - 确定需要迁移的列(取交集) - 批量查询源表数据并插入到目标表 5. **完成迁移**: 输出迁移结果和统计信息 ## 注意事项 ⚠️ **重要提示**: - 迁移前会**清空目标表**的数据(使用 TRUNCATE) - 如果目标表不存在,程序会自动创建 - 只迁移源表和目标表的共同列 - 建议在迁移前备份目标数据库 ## 代码架构说明 ### 分层设计 1. **config 包**: 负责配置管理 - 定义配置结构体 - 提供配置加载和验证功能 - 生成数据库连接字符串(DSN) 2. **database 包**: 负责数据库操作 - 管理数据库连接 - 提供表、列等元数据查询功能 - 封装常用的数据库操作 3. **migration 包**: 负责迁移逻辑 - 实现表迁移的核心逻辑 - 处理批量数据迁移 - 管理迁移进度和日志 4. **main.go**: 程序入口 - 解析命令行参数 - 初始化各个模块 - 协调整个迁移流程 ### 扩展建议 - 添加数据校验功能 - 支持增量迁移(基于时间戳或ID) - 支持迁移进度持久化(断点续传) - 添加迁移前后的数据统计对比 - 支持多线程并发迁移 ## License MIT