如何迁移数据库 #
数据表 #
有单字段主键,字段类型支持整型和字符串。推荐使用整型主键,并发度更高,性能更好。 迁移过程中暂不支持对原表做 DDL 操作。
优化迁移配置 #
迁移配置可以根据情况自定义。有些配置项可以通过比较精确的计算来提升性能。
完整配置示例:
ALTER MIGRATION RULE (
READ(
WORKER_THREAD=40,
BATCH_SIZE=1000,
SHARDING_SIZE=10000000,
RATE_LIMITER (TYPE(NAME='QPS',PROPERTIES('qps'='500')))
),
WRITE(
WORKER_THREAD=40,
BATCH_SIZE=1000,
RATE_LIMITER (TYPE(NAME='TPS',PROPERTIES('tps'='2000')))
),
STREAM_CHANNEL (TYPE(NAME='MEMORY',PROPERTIES('block-queue-size'='10000')))
);
不配置也有默认值,可以通过 DistSQL 查看:
SHOW MIGRATION RULE;
并发数 #
全量迁移会根据表维度以及数据量维度进行拆分,提高并发度,从而提升性能。
默认按 1000 万数据一段进行拆分。假设有 2 张表,分别有 2亿数据和 4 亿 数据,可以拆分为 60 段。
如果机器配置高,并且对限流要求不高,那么可以考虑提高并发线程数 WORKER_THREAD
到 60。
限流 #
如果源端数据库已上线使用,并且对快速响应有较高要求,那最好开启限流,避免影响线上业务。
可以根据数据库服务器配置情况设置一个较小限流值,再根据负载动态修改限流值,重启 job 可以生效。
示例 DistSQL:
-- 修改限流值
ALTER MIGRATION RULE (
READ(
RATE_LIMITER (TYPE(NAME='QPS',PROPERTIES('qps'='1000')))
)
);
-- 查询迁移job列表
SHOW MIGRATION LIST;
-- 关闭job
STOP MIGRATION {jobId};
-- 启动job
START MIGRATION {jobId};
异构迁移 #
目标端是 proxy,目前支持的数据库类型还比较有限,包括:MySQL、PostgreSQL、openGauss。新的数据库类型正在支持中。
源端支持情况如下表所示:
Oracle | MySQL | PostgreSQL | openGauss | |
---|---|---|---|---|
全量迁移 | Y | Y | Y | Y |
增量迁移 | N | Y | Y | Y |
数据对比 | Y | Y | Y | Y |
源端支持的数据库类型更多一些。
第一类:除了全量迁移,还支持增量同步,包括:MySQL、PostgreSQL、openGauss。
第二类:只支持全量迁移,包括:Oracle 等商业数据库。目前经过实际验证的是 Oracle,对应目标端包括 PostgreSQL 和 MySQL。增量同步正在支持中。
目标端支持情况:
MySQL | PostgreSQL | openGauss | |
---|---|---|---|
全量迁移 | Y | Y | Y |
增量迁移 | Y | Y | Y |
数据对比 | Y | Y | Y |
数据一致性校验支持异构数据库,但是支持的算法类型有限制,目前推荐使用 DATA_MATCH 算法。