Logo
如何迁移数据库

如何迁移数据库 #

数据表 #

有单字段主键,字段类型支持整型和字符串。推荐使用整型主键,并发度更高,性能更好。 迁移过程中暂不支持对原表做 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。新的数据库类型正在支持中。

源端支持情况如下表所示:

OracleMySQLPostgreSQLopenGauss
全量迁移YYYY
增量迁移NYYY
数据对比YYYY

源端支持的数据库类型更多一些。

第一类:除了全量迁移,还支持增量同步,包括:MySQL、PostgreSQL、openGauss。

第二类:只支持全量迁移,包括:Oracle 等商业数据库。目前经过实际验证的是 Oracle,对应目标端包括 PostgreSQL 和 MySQL。增量同步正在支持中。

目标端支持情况:

MySQLPostgreSQLopenGauss
全量迁移YYY
增量迁移YYY
数据对比YYY

数据一致性校验支持异构数据库,但是支持的算法类型有限制,目前推荐使用 DATA_MATCH 算法。