从 MySQL 迁到 KingbaseES,KDTS 这些参数不调会吃亏
MySQL 迁 KingbaseES 是信创项目里的高频场景,KDTS 也专门支持 MySQL 源(5.X、8.X,MariaDB 按对应版本映射)。
但很多人第一次用 KDTS 迁 MySQL 库,图省事一路默认参数点到底,结果要么迁得奇慢,要么中途失败,要么迁完数据对不上。这篇把 MySQL 迁移的几个关键配置讲清楚,都是实际项目里踩过的。
先看版本匹配
源端 MySQL 支持 5.X 和 8.X(5.1、5.5、5.6、5.7、8.0 等)。MariaDB 的话按版本映射:
| MariaDB | 按 MySQL 版本处理 |
|---|---|
| 10.1 | 5.6(配置用 5.7) |
| 10.2 ~ 10.4 | 5.7 |
| 10.5 ~ 10.7 | 8.0 |
目标库 KingbaseES 支持 V7、V9R3、V9、V9C7 等,默认 V9。
迁移对象:表、视图、函数、存储过程、触发器、用户自定义类型、注释。可以指定包含或排除某些表。
连接串:字符集这个坑必须提前处理
MySQL 的连接串,字符集设置不对,迁出来的中文就是乱码。常见两种:
源库是 GBK:
bash
jdbc:mysql://ip:3306/dbname?useUnicode=true&characterEncoding=utf-8
源库是 Latin1:
需要在配置文件里打开 character-need-decoding: true,让 KDTS 按字节解码处理,不然数据是错的但你不一定看得出来。
别小看这步,乱码问题在迁移后测试阶段才暴露,那时候排查成本高得多。
大表拆分:不拆会慢到怀疑人生
MySQL 里一张表几千万行很常见。KDTS 默认单线程顺序读,大表不拆分,迁移时间以天计。
KDTS 提供大表拆分:按行数 + 大对象大小排序,对超过阈值的大表分块并行读取。只在读侧拆分,不影响数据本身。
默认阈值:
- 拆分阈值行数:5000000(500 万行)
- 拆分阈值大小:50000 MB
- 拆分最大块数:默认配置
实际建议:
- 迁移前先对源库做统计分析(ANALYZE),让拆分判断更准;
- 大表拆分了,目标端要设
truncate-table: false------因为拆成多块并行写,如果每块先 TRUNCATE 再写,会互相把数据清掉; - 含大对象(LOB)的表,游标读取记录数单独设置。
线程池:IO 密集型任务,线程数别照抄
SHELL 版的线程池在 thread-config.json 里配,分读、写、元数据等线程数。
文档给的经验公式:
scss
线程数 = 核数 / (1 - 0.9)
比如 16 核,读线程 = 16 / 0.1 = 160。这是 IO 密集型的估算方式,先按这个起,实际看源库和目标库负载再调。
别一上来就把线程拉满,源库是生产库的话,迁移线程太猛会拖垮源库业务。
网络超时:抖动环境下的大坑
跨机房、跨网络迁移时,网络抖动会导致连接假死,任务卡在"Running"状态,日志里看到超时。
解决办法是设置网络读取超时,主动中断假死连接:
- KingbaseES 目标端:
socketTimeout=900(单位秒) - MySQL 源端:
socketTimeout=900000(单位毫秒)
还有个技巧:表结构和数据分开迁。迁数据设较短超时,迁结构、约束这些可以设长一点或者 0(不超时)。
注意:超时值必须大于最耗时的操作,比如建大索引。不然索引建到一半被超时杀掉,更麻烦。
大对象防 OOM
单行数据超过 100MB(比如大 BLOB)时,JVM 内存不够会直接 OOM。
对策:
- 调大 JVM:改启动脚本里的
-Xms/-Xmx,或者JAVA_MEMORY; - 控制并发度:少开几个迁移线程,让大对象单线程慢慢搬。
迁移顺序(SHELL 版)
MySQL 源的建议顺序:
- 表结构、表数据、主键约束、索引、唯一性约束
- 外键约束
- 检查约束、视图、函数、存储过程
- 触发器
- 注释
BS 版内部会处理顺序,但手工用 SHELL 版一定要按这个来。
迁移完别急着验收
KDTS 有数据对比功能,迁移完跑一遍对比,看源目标和行数、数据是否一致。不一致的定位到对象重迁(二次迁移)。
还要看 results/ 下的 HTML 报告,里面 Failed 目录有失败对象的明细脚本,能直接看到哪条 DDL 失败了、为什么。
结尾
MySQL 迁 KingbaseES,KDTS 本身很成熟,坑都在配置上:
- 字符集连接串(乱码源头)
- 大表拆分 + truncate-table=false
- 线程数按公式算
- 网络超时按环境调
- 大对象控内存
把这五件事做对,迁移过程基本平稳。剩下的就是等进度条走完,跑数据对比验收。
下一篇讲 Oracle 迁 KingbaseES 的全流程和割接方案。