以下主键更改是否适用于“pt-online-schema-change”?

Would the following primary key change work with `pt-online-schema-change`?

这是 的后续。

目标: 我想 ALTER 使用 pt-online-schema-change 的 table 主键。具体来说,我想从单列主键 (a) 迁移到复合主键 (a,b) (其中 a 在两种情况下都是同一列)。

想法: 我理解 pt-online-schema-change 通常在主键和唯一键都丢失时不起作用。因此,我的计划是执行以下操作:

  1. 添加唯一键:pt-online-schema-change --alter "ADD UNIQUE tmp_unique_key(a)" D=mydb,t=mytable,u=root --execute
  2. 修改主键:pt-online-schema-change --alter "DROP PRIMARY KEY, ADD PRIMARY KEY (a, b)" D=mydb,t=mytable,u=root --execute --check-alter。 (需要 --check-alter 来忽略 DROP PRIMARY KEY 错误)
  3. 修改唯一键:pt-online-schema-change --alter "DROP KEY tmp_unique_key" D=mydb,t=mytable,u=root --execute.

实现: 我已经在一个小型本地 table 上测试了上面的内容,它没有出现任何故障。

问题:假设我有磁盘space来保存临时唯一主键,可以处理负载等,有什么问题吗运行 这个就大了table?

是的,您可以使用 pt-online-schema-change 修改 PRIMARY KEY。以下是 pt-online-schema-change 的工作原理:

  1. 在 origA 上获取一个简短的元数据锁
  2. 在 origA 上添加触发器
  3. 创建新的 table 与 origA、newA 完全相同
  4. 将 ALTER 语句应用于 newA。
  5. 将行从 origA 复制到 newA。
  6. 完成后,将 origA 重命名为 oldA,将 newA 重命名为 origA。
  7. 放弃旧A

在任何时候 table 都不会缺少主键。无需添加 UNIQUE 键。您只需要执行集合中的 #2 就可以了。