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 数据库
安装步骤
- 克隆仓库
bash
git clone https://github.com/your-username/mysql_to_clickhouse.git
cd mysql_to_clickhouse
- 安装依赖
bash
pip install -r requirements.txt
- 配置数据库连接
bash
cp conf.yaml-template conf.yaml
# 编辑 conf.yaml 文件,填写数据库连接信息
🚀 快速开始
方式一:Web 界面(推荐)
- 启动 Web 服务
bash
python app.py
-
访问 Web 界面
打开浏览器访问:
http://127.0.0.1:5000

-
配置和启动
- 在配置页面填写 MySQL 和 ClickHouse 连接信息
- 添加要迁移的表
- 点击"启动迁移任务"开始迁移
方式二:命令行
- 编辑配置文件
bash
vim conf.yaml
- 运行迁移
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_timeout和read_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 # 增大批次大小提升性能
⚠️ 注意事项
- 数据备份:迁移前请确保数据已备份
- 网络稳定:大规模迁移需要稳定的网络连接
- 资源监控:迁移过程中注意监控数据库和服务器资源
- 权限要求:确保 MySQL 和 ClickHouse 用户有足够的权限
- 字符集 :建议使用
utf8mb4字符集以支持完整的 Unicode