非常方便的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
相关推荐
睡不醒男孩0308231 小时前
第二篇:深入探索开源数据库高可用:构建基于CLup的PostgreSQL生产级高可用与读写分离架构
数据库·postgresql·开源·clup
Micro麦可乐4 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
码农阿豪4 小时前
从零到一:Spring Boot快速接入金仓数据库实战
数据库·spring boot·后端
鼎讯信通4 小时前
风电光缆运维提质增效:G-4000A 光缆故障追踪仪破解风场巡检难题
运维·网络·数据库
三十..5 小时前
MySQL 从入门到高可用架构实战精要
运维·数据库·mysql
cfm_29145 小时前
Redis五大基本数据结构底层了解
数据结构·数据库·redis
真实的菜6 小时前
Redis 从入门到精通(十二):典型业务场景实战 —— 排行榜、限流器、秒杀系统、Session 共享
数据库·redis·python
你想考研啊6 小时前
mysql数据库导出导入
数据库·mysql·oracle
十年编程老舅7 小时前
Linux DRM:底层逻辑与实践架构
数据库·mysql
The Sheep 20237 小时前
Vue复习
linux·服务器·数据库