非常方便的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
相关推荐
笃行35033 分钟前
国产化落地避坑 · 干货向|Oracle 迁金仓 KES,我把外连接消除排在隐性陷阱第一位
数据库
老纪的技术唠嗑局1 小时前
花一年时间整理出的:AI 数据库混合搜索入门实践
数据库
川石课堂软件测试2 小时前
安全测试|常见SQL注入攻击方式、实例及预防
服务器·数据库·sql·功能测试·测试工具·安全·单元测试
笃行3502 小时前
国产化落地避坑 · 干货向|迁移后那条「测试能过、一上生产就查空」的 SQL,多半栽在 WHERE 函数顺序上
数据库
蓝田~2 小时前
MySQL慢查询怎么优化?B+Tree索引原理+MVCC读不阻塞写+EXPLAIN执行计划,从5秒到0.05秒
数据库·mysql
Herbert_hwt2 小时前
MySQL学习前言:关于MySQL的历史与当下学习的必要性
mysql
sunxunyong3 小时前
doris用户资源组配置
数据库
Cloud云卷云舒3 小时前
云卷云舒:HaishanDB的AI原生能力主要应用场景
数据库·人工智能·ai-native·haishandb·移动云长期记忆
时间的拾荒人3 小时前
MySQL 视图详解
android·数据库·mysql
qq_366086224 小时前
sql 查询中关于 null 值判断的问题
数据库·sql