以下主键更改是否适用于“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
通常在主键和唯一键都丢失时不起作用。因此,我的计划是执行以下操作:
- 添加唯一键:
pt-online-schema-change --alter "ADD UNIQUE tmp_unique_key(a)" D=mydb,t=mytable,u=root --execute
- 修改主键:
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
错误)
- 修改唯一键:
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 的工作原理:
- 在 origA 上获取一个简短的元数据锁
- 在 origA 上添加触发器
- 创建新的 table 与 origA、newA 完全相同
- 将 ALTER 语句应用于 newA。
- 将行从 origA 复制到 newA。
- 完成后,将 origA 重命名为 oldA,将 newA 重命名为 origA。
- 放弃旧A
在任何时候 table 都不会缺少主键。无需添加 UNIQUE 键。您只需要执行集合中的 #2 就可以了。
这是
目标: 我想 ALTER
使用 pt-online-schema-change
的 table 主键。具体来说,我想从单列主键 (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
- 修改主键:
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
错误) - 修改唯一键:
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 的工作原理:
- 在 origA 上获取一个简短的元数据锁
- 在 origA 上添加触发器
- 创建新的 table 与 origA、newA 完全相同
- 将 ALTER 语句应用于 newA。
- 将行从 origA 复制到 newA。
- 完成后,将 origA 重命名为 oldA,将 newA 重命名为 origA。
- 放弃旧A
在任何时候 table 都不会缺少主键。无需添加 UNIQUE 键。您只需要执行集合中的 #2 就可以了。