
# 预检查
为了避免分片变更失败，请您最晚在变更前一天完成以下内容的检查。
#### 预检查内容
表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修正（如主键、唯一键因为数据原因无法修改），请在管理控制台右上角，选择"工单 \> 新建工单"，联系运维人员处理。
  
- 没有主键的表不支持迁移。 如果没有主键，就无法精确定位记录，在分片变更过程中如果发生重试，可能导致数据增多。 解决方案：增加主键。
  
- 分片键不是主键的一部分可能导致逻辑表存在主键重复的数据(因为位于不同的物理分表内)。当数据需要重分布时，这类数据如果路由到同一物理表，由于主键相同，将只会保留一条，必定会导致迁移后的数据量和原来不一致，而导致分片变更失败。
  ![](https://support.huaweicloud.com/usermanual-ddm/public_sys-resources/note_3.0-zh-cn.png)
  主键是全局唯一序列和分片数不变化的情况下不会发生此种错误。
  解决方案：订正数据，再重新校验。
  
 
