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

时间:2015-06-12 08:20:20

标签: mysql percona pt-online-schema-change

这是Can I use pt-online-schema-change to change a primary key?的后续行动。

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

想法:我理解pt-online-schema-change --alter "ADD UNIQUE tmp_unique_key(a)" D=mydb,t=mytable,u=root --execute通常在缺少主键和唯一键时不起作用。我的计划是为了做到以下几点:

  1. 添加唯一键:pt-online-schema-change --alter "DROP PRIMARY KEY, ADD PRIMARY KEY (a, b)" D=mydb,t=mytable,u=root --execute --check-alter
  2. 修改主键:--check-alter。 (忽略DROP PRIMARY KEY错误)
  3. 需要pt-online-schema-change --alter "DROP KEY tmp_unique_key" D=mydb,t=mytable,u=root --execute
  4. 修改唯一键:var select =('<?php echo implode('","', $select); ?>'); var label='"X"'+ ',"'+select+'"'; g = new Dygraph( // containing div document.getElementById("graphdiv"),allData, { labels: [label], // I tried it with and without the brackets, no difference legend:'always', title:'Abweichung der Messerte', titleHeight:32, ylabel:'<?php echo $art?>', xlabel:'Zeit', showRangeSelector: true, digitsAfterDecimal: 5, strokeWidth: 1.5, drawPoints: true, } );
  5. 实施:我在一个很小的本地桌子上测试了上面的内容,它没有任何故障。

    问题:假设我有磁盘空间来容纳临时唯一主键并且可以处理负载等,那么在大型表上运行它是否有任何问题?

1 个答案:

答案 0 :(得分:1)

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

  1. 获取origA上的简短元数据锁
  2. 在origA上添加触发器
  3. 创建与origA,newA
  4. 完全相同的新表格
  5. 将ALTER语句应用于newA。
  6. 将行从origA复制到newA。
  7. 完成后,将origA重命名为oldA,将newA重命名为origA。
  8. 删掉oldA
  9. 任何一张桌子都没有丢失PRIMARY KEY。无需添加UNIQUE键。你需要执行的只是你的集合中的#2,这样就可以了。