0

这是我可以使用 pt-online-schema-change 更改主键吗?.

目标:我想ALTER使用pt-online-schema-change. 具体来说,我想从单列主键迁移(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.

实施:我已经在一个很小的本地表上测试了上述内容,并且没有出现故障。

问题:假设我有磁盘空间来保存临时唯一主键并且可以处理负载等,那么在大表上运行它有什么问题吗?

4

1 回答 1

1

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

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

任何一个表都不会缺少 PRIMARY KEY。无需添加唯一键。您只需要在您的集合中执行 #2 即可。

于 2015-08-21T21:10:34.807 回答