Использование ALTER TABLE в MySQL sync
Использование команды ALTER TABLE
в облачных базах данных MySQL sync может привести к остановке кластера. Вместо ALTER TABLE
мы рекомендуем использовать утилиту pt-online-schema-change
от Percona.
Утилита pt-online-schema-change
изменяет структуру таблицы как ALTER TABLE
, но при этом не блокирует операции чтения и записи.
Подробнее об использовании pt-online-schema-change
в официальной документации.
Используйте утилиту только при наличии бэкапа.
Описание утилиты pt-online-schema-change
Утилита pt-online-schema-change
работает не на самой таблице, а на ее копии. Оригинальная таблица не блокируется, операции чтения и записи остаются доступны.
Утилита создает пустую копию изменяемой таблицы, вносит необходимые правки в ее структуру, а затем копирует данные из оригинальной таблицы.
После завершения копирования данных в новую таблицу pt-online-schema-change
использует операцию RENAME TABLE
и одновременно переименовывает оригинальную и новую таблицу. После по умолчанию оригинальная таблица удаляется.
Утилита создает триггеры в оригинальной таблице для обновления данных в новой — любые изменения в оригинальной таблице при копировании будут отражены в новой. Если какие-либо триггеры уже определены в таблице, утилита не будет работать.
Риски использования
Внешние ключи (constraints
) служат для связывания таблиц, подробнее в официальной документации MySQL.
Использование внешних ключей усложняет работу утилиты и представляет собой дополнительный риск. Когда внешние ключи ссылаются на таблицу, атомарное переименование оригинальной и новой таблицы не работает. Утилита pt-online-schema-change
должна обновить внешние ключи для отсылки к новой таблице после внесения изменений в схему. Проблема решается с помощью параметра --alter-foreign-keys-method
.
При использовании внешних ключей у финальной таблицы будут те же внешние ключи и индексы, что и в оригинальной (если не указать иное в ALTER
), при этом имена объектов могут немного измениться для исключения коллизий имен в MySQL и InnoDB.
Для безопасности данных изменения в таблицу будут внесены только при использовании с утилитой ключа --execute
.
Установить pt-online-schema-change
-
Установите утилиту pt-online-schema-change одним из способов:
-
загрузите Percona Toolkit с официального сайта;
-
загрузите Percona Toolkit через командную строку с помощью команд:
wget percona.com/get/percona-toolkit.tar.gz
wget percona.com/get/percona-toolkit.rpm
wget percona.com/get/percona-toolkit.deb
-