将MySQL的业务数据迁移到ClickHouse是很多团队开展OLAP分析的常见需求,Waterdrop作为一款轻量级的数据集成工具,能够简化整个迁移流程,降低数据同步的复杂度。它支持多种数据源和目标端的对接,对MySQL到ClickHouse的迁移场景有很好的适配性,不需要编写复杂的同步代码就能完成数据流转。

迁移前的环境准备
在开始迁移之前,需要先完成相关环境的搭建和配置,确保所有组件能够正常通信。
- 安装MySQL数据库,确保待迁移的库表已经存在,并且拥有可以读取数据的账号权限。
- 安装ClickHouse数据库,提前创建好对应迁移数据的目标表,表结构需要和MySQL源表做好字段类型映射。
- 下载并安装Waterdrop工具,选择适配当前操作系统的版本,解压后配置好运行环境变量。
MySQL与ClickHouse的字段类型映射
MySQL和ClickHouse的字段类型存在差异,迁移前需要明确对应映射关系,避免数据类型不兼容导致迁移失败。常见的映射关系如下:
| MySQL字段类型 | ClickHouse对应字段类型 |
|---|---|
| INT | Int32 |
| BIGINT | Int64 |
| VARCHAR | String |
| DATE | Date |
| DATETIME | DateTime |
| DECIMAL | Decimal |
Waterdrop配置文件编写
Waterdrop通过配置文件定义数据源、目标端和数据处理规则,我们需要分别配置MySQL输入源和ClickHouse输出端的参数。
MySQL输入源配置
在Waterdrop的配置文件中,输入部分需要指定MySQL的连接信息、待读取的表名和查询条件。示例配置如下:
{
"source": {
"type": "mysql",
"hostname": "127.0.0.1",
"port": 3306,
"database": "test_db",
"table": "user_order",
"username": "root",
"password": "123456",
"query": "select * from user_order where create_time >= '2024-01-01'"
}
}
ClickHouse输出端配置
输出部分需要指定ClickHouse的连接信息和目标表信息,同时可以配置批量写入的参数提升迁移效率。示例配置如下:
{
"sink": {
"type": "clickhouse",
"hostname": "127.0.0.1",
"port": 9000,
"database": "olap_db",
"table": "user_order_ck",
"username": "default",
"password": "",
"batch_size": 10000
}
}
完整配置文件示例
将输入和输出配置整合后,完整的Waterdrop配置文件如下:
{
"source": {
"type": "mysql",
"hostname": "127.0.0.1",
"port": 3306,
"database": "test_db",
"table": "user_order",
"username": "root",
"password": "123456",
"query": "select id,user_id,order_amount,create_time from user_order"
},
"sink": {
"type": "clickhouse",
"hostname": "127.0.0.1",
"port": 9000,
"database": "olap_db",
"table": "user_order_ck",
"username": "default",
"password": "",
"batch_size": 10000
},
"transform": []
}
执行数据迁移任务
完成配置文件编写后,就可以启动Waterdrop执行迁移任务了。在Waterdrop的安装目录下执行以下命令:
# 启动迁移任务,指定配置文件路径 ./bin/waterdrop.sh --config /path/to/mysql_to_ck_config.json
执行后Waterdrop会读取MySQL中的数据,按照配置的批量大小写入到ClickHouse的目标表中,执行过程中可以在控制台查看迁移进度和日志信息。
迁移注意事项与问题排查
- 迁移前先验证MySQL账号是否有对应表的SELECT权限,ClickHouse账号是否有目标表的INSERT权限,避免权限不足导致迁移失败。
- 如果数据量较大,可以适当调大batch_size参数,减少写入次数,提升迁移效率,但需要注意不要超过ClickHouse的最大批量写入限制。
- 迁移过程中如果出现字段类型不匹配的错误,需要检查映射关系是否正确,必要时可以在query中对字段做类型转换处理。
- 迁移完成后可以对比MySQL和ClickHouse的数据条数,验证数据是否完整迁移,避免数据丢失。
如果迁移过程中需要实时同步MySQL的增量数据,可以在query中配置增量条件,定期执行迁移任务,或者结合Waterdrop的定时任务功能实现周期性同步。
迁移后OLAP分析验证
数据迁移完成后,可以在ClickHouse中执行分析查询,验证数据是否可用。例如查询用户订单的总金额:
-- 查询所有用户的总订单金额 SELECT sum(order_amount) as total_amount FROM olap_db.user_order_ck;
如果查询能够快速返回结果,说明数据已经成功迁移到ClickHouse,可以正常支撑OLAP分析需求。
MySQLClickHouseWaterdropOLAP修改时间:2026-07-21 23:00:27