非常方便的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
相关推荐
June bug3 分钟前
【高频SQL基础版】排序和分组
数据库·sql
珠海西格4 分钟前
光伏电站全景感知体系:数据采集与设备状态监测技术
大数据·运维·服务器·数据库·人工智能
爱基百客22 分钟前
从人鼠到植物:SEdb 3.0数据库一站式检索与分析超级增强子调控网络
数据库·国自然·转录因子·组蛋白修饰·增强子
来来走走26 分钟前
rocky linux 9.7安装mysql 8.4+
linux·数据库·mysql
怣5041 分钟前
MySQL多表连接完全指南:内连接与外连接超详细讲解
数据库·sql·mysql
专注VB编程开发20年1 小时前
python图片验证码识别selenium爬虫--超级鹰实现自动登录,滑块,点击
数据库·python·mysql
智商偏低1 小时前
Postgresql导入几何数据(shp,geojson)的几种方式
数据库·postgresql
我是Superman丶1 小时前
在 PostgreSQL 中使用 JSONB 类型并结合 MyBatis-Plus 实现自动注入,主要有以下几种方案
数据库·postgresql·mybatis
五度易链-区域产业数字化管理平台1 小时前
「五度易链」行业标准信息数据库简介
大数据·数据库
qinyia2 小时前
通过本地构建解决Cartographer编译中absl依赖缺失问题
linux·运维·服务器·mysql·ubuntu