更新时间:2024-07-30 GMT+08:00

预检查

为了避免分片变更失败,请您最晚在变更前一天完成以下内容的检查。

预检查内容

表1 预检查内容

检查内容

检查目的

检查未通过解决方案

表名长度检查

分片变更需要数据重分布时(例如:增加分片),会创建临时表,临时表的表名长度会略长于原表名,需确保临时表的表名长度不超过MySQL限制。

请修改过长的表名。

DN实例binlog全量备份时间检查

客户全量备份是否保留足够长时间。

进入DN console,确保全量备份保留时间大于等于30天。

DN节点binlog必须开启

Binlog必须开启以支持在线变更。

如果您的DN节点是RDS实例,确保Binlog开启。

DN节点binlog本地保留时间检查

Binlog在DN节点上的保留时间必须足够长。

如果您的DN节点是RDS实例,无需解决。

广播表数据一致性检查

保证广播表数据一致后再执行分片变更。

请联系DDM运维人员。

源物理分片的字符集和排序规则检查

保证分片变更后字符的展示和排序一致。

请联系DDM运维人员。

物理表建表语句检查

保证各物理分片上的表结构保持一致。

请先使用check table 命令查询表结构不一致详情,之后再使用alter 语法对表进行修正。

主键检查

要求源库所有表都具有主键,且拆分键是主键一部分以保证分片变更后数据一致性。

如果表不存在主键,请使用alter语句增加主键。

数据库实例链接检查

DN节点是否可连接。

检查安全组等配置。

数据库实例参数检查

源DN节点和目标DN节点数据库关键参数配置需要相同。

请进入DN console对参数配置进行修改。

数据库实例磁盘空间检查

防止分片变更过程中,DN节点磁盘不足。

对DN节点进行磁盘扩容。

注意:

本项检查根据估计值进行判断,极端情况下与实际值有一定差别。

数据库实例时区检查

源DN节点和目标DN节点时区要求相同。

请进入DN console参数配置对时区进行修改。

物理分表个数限制检查

在增加分片场景中,源表每一条数据都需要重新计算路由并分发到新的物理分表中。如果分片变更后物理分表数过多,分片变更耗时过长,需检查单个DN节点的物理分表个数是否超过限制。

请联系客服处理。

常见问题和解决方案

  • 物理表结构不一致导致扩容失败。

    解决方案:请先使用check table语句对表结构做一致性检查,并配合alter table等语句对表结构做修正。如果无法进行DDL修正(如主键、唯一键因为数据原因无法修改),请联系运维人员处理。

  • 没有主键的表不支持迁移。 如果没有主键,就无法精确定位记录,在分片变更过程中如果发生重试,可能导致数据增多。

    解决方案:增加主键。

  • 分片键不是主键的一部分可能导致逻辑表存在主键重复的数据(因为位于不同的物理分表内)。当数据需要重分布时,这类数据如果路由到同一物理表,由于主键相同,将只会保留一条,必定会导致迁移后的数据量和原来不一致,而导致分片变更失败。

    主键是全局唯一序列和分片数不变化的情况下不会发生此种错误。

    解决方案:订正数据,再重新校验。