非常方便的MySQL迁移数据ClickHouse工具

MySQL to ClickHouse 数据迁移工具

本人是此项目的原作,感谢大家支持!

| 地址: https://github.com/code66889/migrate-mysql-to-clickhouse.git

一个功能强大、易于使用的 MySQL 到 ClickHouse 数据迁移工具,支持 Web 界面管理和命令行执行,适用于大规模数据迁移场景。

✨ 功能特性

核心功能

  • 🚀 高性能迁移:采用流式读取和批量插入,支持大规模数据迁移
  • 📊 Web 管理界面:现代化的 Web UI,可视化配置和任务管理
  • 📝 任务历史记录:完整的任务执行历史,支持日志查看和状态跟踪
  • 数据验证:自动验证迁移数据的完整性和一致性
  • 🔔 飞书通知:支持飞书机器人通知,实时了解任务状态

技术特性

  • 流式处理:使用 SSCursor 避免内存溢出,支持超大表迁移
  • 断点续传:支持错误处理和继续执行
  • 性能优化:可配置批次大小、连接超时等参数
  • 类型映射:自动处理 MySQL 到 ClickHouse 的数据类型转换
  • 表结构同步:自动创建 ClickHouse 表结构

技术架构

系统架构图

通知服务
数据目标
数据源
数据存储层
应用服务层
用户界面层
Web 管理界面

Flask + HTML/CSS/JS
命令行接口

Python CLI
配置管理

Config Manager
任务调度

Task Scheduler
数据迁移引擎

Migration Engine
任务历史管理

Task History
SQLite 数据库

任务记录/日志
配置文件

conf.yaml
MySQL 数据库

源数据
ClickHouse 数据库

目标数据
飞书机器人

Feishu Notifier

数据迁移流程

飞书通知 SQLite数据库 ClickHouse数据库 MySQL数据库 迁移引擎 Web界面 用户 飞书通知 SQLite数据库 ClickHouse数据库 MySQL数据库 迁移引擎 Web界面 用户 loop [批量迁移数据] 1. 配置数据库连接 2. 添加迁移表 3. 启动迁移任务 创建任务记录 启动迁移任务 发送开始通知 获取表结构 创建目标表 流式读取数据(SSCursor) 批量插入数据 记录进度日志 验证数据行数 验证数据行数 更新任务状态 发送完成通知 查询任务详情 显示迁移结果

📦 安装

环境要求

  • Python 3.7+
  • MySQL 数据库
  • ClickHouse 数据库

安装步骤

  1. 克隆仓库
bash 复制代码
git clone https://github.com/your-username/mysql_to_clickhouse.git
cd mysql_to_clickhouse
  1. 安装依赖
bash 复制代码
pip install -r requirements.txt
  1. 配置数据库连接
bash 复制代码
cp conf.yaml-template conf.yaml
# 编辑 conf.yaml 文件,填写数据库连接信息

🚀 快速开始

方式一:Web 界面(推荐)

  1. 启动 Web 服务
bash 复制代码
python app.py
  1. 访问 Web 界面

    打开浏览器访问:http://127.0.0.1:5000

  2. 配置和启动

    • 在配置页面填写 MySQL 和 ClickHouse 连接信息
    • 添加要迁移的表
    • 点击"启动迁移任务"开始迁移

方式二:命令行

  1. 编辑配置文件
bash 复制代码
vim conf.yaml
  1. 运行迁移
bash 复制代码
python mysql_to_clickhouse.py

📖 配置说明

配置文件结构

配置文件 conf.yaml 包含以下主要部分:

yaml 复制代码
# MySQL 数据库配置
mysql:
  host: "your-mysql-host"
  port: 3306
  user: "your-username"
  password: "your-password"
  database: "your-database"
  charset: "utf8mb4"

# ClickHouse 数据库配置
clickhouse:
  host: "your-clickhouse-host"
  port: 8123
  user: "default"
  password: "your-password"
  database: "your-database"

# 迁移任务配置
migration:
  tables:
    - mysql_table: "source_table"
      ch_table: "target_table"
      batch_size: 10000
      verify: true

详细配置说明请参考 conf.yaml-template 文件。

🎯 使用场景

  • 数据仓库迁移:将 MySQL 数据迁移到 ClickHouse 进行分析
  • 数据同步:定期同步 MySQL 数据到 ClickHouse
  • 数据备份:将 MySQL 数据备份到 ClickHouse
  • 性能优化:将查询频繁的数据迁移到 ClickHouse 提升性能

📊 Web 界面功能

配置管理

  • 可视化配置数据库连接
  • 批量配置迁移表
  • 实时保存配置

任务管理

  • 查看所有迁移任务历史
  • 实时查看任务执行状态
  • 查看详细的执行日志
  • 查看每个表的迁移详情

任务详情

  • 任务基本信息(状态、时间、统计)
  • 表迁移详情(行数、速度、验证结果)
  • 完整执行日志
  • 配置快照

🔧 高级功能

性能调优

  • 调整批次大小:根据数据量和网络情况调整 batch_size
  • 连接超时设置:配置 connection_timeoutread_timeout
  • MySQL 获取大小:调整 mysql_fetch_size 优化读取性能

错误处理

  • continue_on_error: true:遇到错误时继续执行其他表
  • skip_empty_tables: true:自动跳过空表
  • 详细的错误日志记录

飞书通知

配置飞书机器人 Webhook,支持:

  • 任务开始通知
  • 任务成功通知
  • 任务失败通知
  • 进度更新通知(可选)

📁 项目结构

复制代码
mysql_to_clickhouse/
├── app.py                    # Flask Web 应用
├── database.py               # SQLite 数据库管理
├── mysql_to_clickhouse.py    # 核心迁移逻辑
├── feishu_notifier.py        # 飞书通知模块
├── conf.yaml                 # 配置文件(需自行创建)
├── conf.yaml-template        # 配置模板
├── requirements.txt          # Python 依赖
├── templates/                # Web 模板
│   ├── base.html
│   ├── index.html
│   ├── tasks.html
│   └── task_detail.html
└── README.md                 # 项目说明

🛠️ 技术栈

  • 后端框架:Flask 3.0
  • 数据库驱动:pymysql, clickhouse-connect
  • 数据存储:SQLite(任务记录)
  • 前端技术:HTML5, CSS3, JavaScript
  • 配置管理:PyYAML

📝 使用示例

迁移单个表

yaml 复制代码
migration:
  tables:
    - mysql_table: "users"
      ch_table: "users"
      batch_size: 10000
      verify: true

迁移多个表

yaml 复制代码
migration:
  tables:
    - mysql_table: "users"
      ch_table: "users"
    - mysql_table: "orders"
      ch_table: "orders"
    - mysql_table: "products"
      ch_table: "products"

自定义批次大小

yaml 复制代码
migration:
  default_batch_size: 50000  # 增大批次大小提升性能

⚠️ 注意事项

  1. 数据备份:迁移前请确保数据已备份
  2. 网络稳定:大规模迁移需要稳定的网络连接
  3. 资源监控:迁移过程中注意监控数据库和服务器资源
  4. 权限要求:确保 MySQL 和 ClickHouse 用户有足够的权限
  5. 字符集 :建议使用 utf8mb4 字符集以支持完整的 Unicode
相关推荐
yongui478342 小时前
使用C#实现Excel实时读取并导入SQL数据库
数据库·c#·excel
ryy10255063192 小时前
Springboot+Mysql 图书管理系统【源码+sql】
spring boot·sql·mysql
JZC_xiaozhong2 小时前
分析型数据库 ClickHouse 在数据中台中的集成
大数据·数据库·clickhouse·架构·数据一致性·数据孤岛解决方案·数据集成与应用集成
航Hang*2 小时前
第3章:复习篇——第3节:数据查询与统计---题库
数据库·笔记·sql·学习·mysql·期末·复习
廋到被风吹走2 小时前
【数据库】【MySQL】事务隔离深度解析:MVCC 实现与幻读解决机制
android·数据库·mysql
Star Learning Python3 小时前
MySQL面试的基础知识
数据库·sql
知识分享小能手3 小时前
Oracle 19c入门学习教程,从入门到精通,Oracle管理工具 —— 知识点详解(3)
数据库·学习·oracle
m0_748252383 小时前
Ruby 数据类型概述
开发语言·mysql·ruby
aigcapi3 小时前
中转API哪家好?2026主流服务商横向测评+全场景选型指南
数据库·api