Будет ли следующее изменение первичного ключа работать с `pt-online-schema-change`?

Это продолжение " Могу ли я использовать 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,

Реализация: я протестировал вышеупомянутое на крошечной локальной таблице, и она работала без сбоев.

Вопрос: Предполагая, что у меня есть место на диске для хранения временного уникального первичного ключа и я могу справиться с нагрузкой и т. Д., Есть ли проблемы при запуске этого на большой таблице?

1 ответ

Решение

Да, вы можете изменить ПЕРВИЧНЫЙ КЛЮЧ, используя pt-online-schema-change. Вот как работает pt-online-schema-change:

  1. Получите краткую блокировку метаданных на origA
  2. Добавьте триггеры на origA
  3. Создать новую таблицу точно так же, как origA, newA
  4. Примените оператор ALTER к newA.
  5. Скопируйте строки из origA в newA.
  6. Когда закончите, переименуйте origA в oldA, переименуйте newA в origA.
  7. Брось старый

Ни в одной из этих таблиц отсутствует ПЕРВИЧНЫЙ КЛЮЧ. Нет необходимости добавлять уникальный ключ. Все, что вам нужно выполнить, это # ​​2 в вашем наборе, и это будет сделано.

Другие вопросы по тегам