Будет ли следующее изменение первичного ключа работать с `pt-online-schema-change`?
Это продолжение " Могу ли я использовать pt-online-schema-change для изменения первичного ключа?",
Цель: я бы хотел 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
- Изменить первичный ключ:
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
,
Реализация: я протестировал вышеупомянутое на крошечной локальной таблице, и она работала без сбоев.
Вопрос: Предполагая, что у меня есть место на диске для хранения временного уникального первичного ключа и я могу справиться с нагрузкой и т. Д., Есть ли проблемы при запуске этого на большой таблице?
1 ответ
Да, вы можете изменить ПЕРВИЧНЫЙ КЛЮЧ, используя pt-online-schema-change. Вот как работает pt-online-schema-change:
- Получите краткую блокировку метаданных на origA
- Добавьте триггеры на origA
- Создать новую таблицу точно так же, как origA, newA
- Примените оператор ALTER к newA.
- Скопируйте строки из origA в newA.
- Когда закончите, переименуйте origA в oldA, переименуйте newA в origA.
- Брось старый
Ни в одной из этих таблиц отсутствует ПЕРВИЧНЫЙ КЛЮЧ. Нет необходимости добавлять уникальный ключ. Все, что вам нужно выполнить, это # 2 в вашем наборе, и это будет сделано.