先说现场
MySQL 到 Kingbase 的难点不在数据导出导入,而在自增主键、tinyint、datetime、字符集、大小写和后续增量能力。实施时先用 2 到 3 张典型表跑通,再逐步放大。
典型表优先选择:
- 带自增主键的表。
- 状态、布尔字段较多的表。
- 时间字段完整的表。
- 宽表和金额字段较多的表。
方案怎么选
| 方案 | 适合场景 | 主要限制 |
|---|---|---|
| Canal | MySQL binlog 增量解析、消息分发 | 需要 MySQL、Kafka 和消费端配合,适合 CDC 链路但不适合直接完成异构建表 |
| Kettle | 批量抽取、转换和报表数据准备 | 偏 ETL 流程,长期同步和 CDC 管理不如专用工具直观 |
| DataX | 一次性离线全量迁移 | 需要维护 JSON,缺少可视化任务和 CDC 管理 |
| DataMover | MySQL 到 Kingbase 的全量、增量字段和 CDC | 需要部署 Manager、Worker 和元数据库 |
如果只是做一次性迁移,DataX 也能完成;如果还要长期同步、删除事件和断点续传,DataMover 的可视化任务和位点管理更合适。
DataMover 是什么
DataMover 是一个私有化部署的数据迁移同步工具:
- 普通任务处理全量和基于增量字段的定时同步。
- 实时任务处理 MySQL CDC,通过 binlog 捕获 INSERT、UPDATE、DELETE。
- Web 界面配置数据源、表映射、字段映射、同步策略和执行监控。
- Manager 负责调度,Worker 负责实际读取和写入。
部署拓扑
浏览器
|
Manager: 8000
|
Worker: 8011
|
元数据库:MySQL 5.7+ 或 PostgreSQL 12+

curl -fsSL https://down.datamover.cn/install.sh | bash
下载页:https://datamover.cn/download.html
文档页:https://datamover.cn/doc/
准备阶段:测试表建表和造数
先在 MySQL 源端创建测试表并生成数据,Kingbase 目标端可以用 DataMover 自动建表,也可以先按预期结构创建。
MySQL 源端测试表
CREATE TABLE dm_demo_user (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(64),
phone VARCHAR(32),
status VARCHAR(16),
amount DECIMAL(18,2),
created_at DATETIME,
updated_at DATETIME
);
INSERT INTO dm_demo_user (username, phone, status, amount, created_at, updated_at)
SELECT
CONCAT('user_', n),
CONCAT('1380000', LPAD(n, 4, '0')),
CASE WHEN n % 2 = 0 THEN 'active' ELSE 'inactive' END,
ROUND(RAND() * 100000, 2),
NOW(),
NOW()
FROM (
SELECT @n := @n + 1 AS n
FROM information_schema.columns a,
information_schema.columns b,
(SELECT @n := 0) c
LIMIT 10000
) t;
Kingbase 目标端预期表结构
CREATE TABLE dm_demo_user (
id BIGINT PRIMARY KEY,
username VARCHAR(64),
phone VARCHAR(32),
status VARCHAR(16),
amount NUMERIC(18,2),
created_at TIMESTAMP,
updated_at TIMESTAMP
);
源库和目标库权限
| 端 | 需要权限 | 原因 |
|---|---|---|
| MySQL 源端 | 读取表结构、业务数据和元数据;CDC 场景还要 binlog 读取权限 | 数据源连接、选表、字段映射和增量读取 |
| Kingbase 目标端 | 建表、写入、更新、删除 | 自动建表和任务写入 |
| 元数据库 | 创建数据库和表权限 | 保存任务、位点和执行记录 |
| Worker | 访问源端、目标端和元数据库 | 实际执行任务 |
MySQL CDC 前还需要确认 binlog 已开启、行格式满足要求,并使用具备复制权限的账号。
MySQL 源端权限检测
SHOW GRANTS FOR 'datamover_user'@'%';
SELECT @@log_bin, @@binlog_format, @@binlog_row_image;
MySQL 源端授权示例
CREATE USER 'datamover_user'@'%' IDENTIFIED BY 'change_me';
GRANT SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT
ON *.* TO 'datamover_user'@'%';
FLUSH PRIVILEGES;
Kingbase 目标端权限检测
SELECT grantee, table_schema, table_name, privilege_type
FROM information_schema.table_privileges
WHERE grantee = 'datamover_target'
ORDER BY table_name, privilege_type;
Kingbase 目标端授权示例
CREATE USER datamover_target PASSWORD 'change_me';
CREATE SCHEMA datamover_sync AUTHORIZATION datamover_target;
GRANT ALL ON SCHEMA datamover_sync TO datamover_target;
DataMover 配置选择和内存配置
| 配置 | 建议 | 说明 |
|---|---|---|
| 数据批大小 | 默认 5000 | 先跑通再调优,避免一开始调大 |
| 抽取方式 | 首次全量选择 全量 | 日常同步选择 增量 |
| 增量字段 | 优先自增主键或 updated_at | 字段应有索引 |
| 调度方式 | 一次性或间隔性 | 按业务节奏配置 |
| Worker JVM | 数据量大时调大 | 避免批大小提升后频繁 GC |
| 目标端索引 | 大批量迁移可评估迁移后再建索引 | 减少写入放大 |
创建普通任务
- 添加 MySQL 源端数据源,测试连接通过。
- 添加 Kingbase 目标端数据源,确认建表和写入权限。
- 新建普通任务,选择源端和目标端。
- 进入表映射,选择试迁表。
- 检查字段映射和同步策略。
- 保存并启动。

字段映射重点
| MySQL 类型/特性 | Kingbase 处理 | 要确认什么 |
|---|---|---|
AUTO_INCREMENT | 序列或 identity | 当前值校准 |
TINYINT | SMALLINT 或对应整型 | 布尔、状态字段语义 |
DATETIME | Kingbase 时间类型 | 精度和时区 |
VARCHAR | VARCHAR | 长度、字符集 |
ON UPDATE | 时间戳逻辑单独确认 | 是否保留自动更新时间行为 |
增量字段和 CDC
普通增量字段只能感知新增和修改,无法感知物理删除。需要同步删除时,使用实时任务 CDC。

MySQL CDC 前检查:
- binlog 是否开启。
- 行格式是否满足要求。
- 源端账号是否具备复制权限。

结果验证
SELECT COUNT(*) FROM source_table;
SELECT COUNT(*) FROM target_table;
SELECT MIN(id), MAX(id) FROM source_table;
SELECT MIN(id), MAX(id) FROM target_table;
SELECT status, COUNT(*) FROM source_table GROUP BY status;
SELECT status, COUNT(*) FROM target_table GROUP BY status;
SELECT * FROM source_table WHERE id IN (1, 100, 1000);
SELECT * FROM target_table WHERE id IN (1, 100, 1000);
常见坑
自增主键迁移后新数据冲突
原因是自增当前值没有同步到 Kingbase 序列。全量迁移后查询目标表最大主键,并校准序列。
tinyint 状态字段被错误解释
TINYINT(1) 在 MySQL 里常被当布尔值,迁到 Kingbase 后要确认目标字段类型和业务逻辑。
CDC 启动后没有增量
检查 binlog、行格式、源端权限和 Worker 日志。