要将auto_increment改造为auto_random不停应用方案

如果是要将auto_increment字段改为auto_random ,要不停应用,有什么方案嘛?
原地改是不行的,因为我的表结构主键是一个复合主键,包含了一个分区键,无法直接更改

CREATE TABLE `t5` (
   `id` bigint NOT NULL AUTO_INCREMENT ,
   `a` bigint DEFAULT NULL  ,
   `b` varchar(255)    ,
    `c` timestamp NOT NULL COMMENT '分区键',
   PRIMARY KEY (`id`,`c`) ,
   KEY `sendTm` (`c`));
   
 ALTER TABLE t5 MODIFY COLUMN id BIGINT AUTO_RANDOM(5);
ERROR 8216 (HY000): Invalid auto random: auto_random can only be converted from auto_increment clustered primary key

我想到的是dumping导出+lightning导入,但是这样是要停业务的,想知道大家有什么好的想法

1、创建临时表。
2、创建cdc,从生产表到临时表同步。
3、临时表与生产表,通过rename的方式交换。

全量导入+ticdc增量+rename切换?

rename是原子的期间数据是一致的感觉闲时操作应该没问题

创建临时表–》数据同步–》通过rename进行替换。

万一同步中有新增的数据呢?

能不能用 SHARD_ROW_ID_BITS

考虑临时表或者视图实现看看

  • 新建一张结构相同的表id 直接定义为 AUTO_RANDOM
  • 开启双写:业务老表 + 新表同时写入(轻量改造,无风险)
  • 使用 TiCDC/lightning 全量同步历史数据到新表
  • 校验数据一致性
  • 原子切换表名:毫秒级切换,业务无感
  • 删除老表,完成升级

双写 + CDC 同步比较靠谱

  • 主键改造必须用「双写法」
  • 全程不停服、无锁表、无业务中断

提前搞一个主备容灾方案可行?

双写还要改造业务那不是影响更大吗

得业务支持双写才行吧

估计都需要停吧。