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