预检查
为了避免分片变更失败,请您最晚在变更前一天完成以下内容的检查。
预检查内容
检查内容 |
检查目的 |
检查未通过解决方案 |
---|---|---|
表名长度检查 |
分片变更需要数据重分布时(例如:增加分片),会创建临时表,临时表的表名长度会略长于原表名,需确保临时表的表名长度不超过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修正(如主键、唯一键因为数据原因无法修改),请联系运维人员处理。
- 没有主键的表不支持迁移。 如果没有主键,就无法精确定位记录,在分片变更过程中如果发生重试,可能导致数据增多。
- 分片键不是主键的一部分可能导致逻辑表存在主键重复的数据(因为位于不同的物理分表内)。当数据需要重分布时,这类数据如果路由到同一物理表,由于主键相同,将只会保留一条,必定会导致迁移后的数据量和原来不一致,而导致分片变更失败。
主键是全局唯一序列和分片数不变化的情况下不会发生此种错误。
解决方案:订正数据,再重新校验。