l3ftoverz
@l3ftoverz
Rings of Saturn - The Husk

Как выполнить миграцию на продакшне и не убить его?

Давно задавался таким вопросом, а ещё и на собеседовании сегодня спросили.
Представим ситуацию, есть таблица с высокой нагрузкой, куча строк, постоянная выборка и она постоянно дополняется, например какие-то диалоги.

Как сделать ALTER для таблицы, например добавить поле и не положить всю систему? Насколько известно мне, в контексте MYSQL, она создаст новую таблицу с новой структурой, перельёт данные и переименует таблицы, а ещё скорее всего и лочит исходную таблицу. В общем, это убийственный вариант.

Если сделать новую таблицу и самому сделать очередь и перелить данные потихонечку в новую таблицу - тоже такое себе, это:

1. Долго.
2. Может ударить по дисковому пространству.
3. В контексте диалогов, которыми пользуется очень много людей - такой импорт не закончится никогда.

Что же тогда делают?
  • Вопрос задан
  • 109 просмотров
Решения вопроса 2
Во первых прочитайте про online ddl в mysql. Многие миграции не требуют блокировки записи.

Во вторых можно использовать pt-online-schema-change
Это и есть переливание в новую таблицу. Но авторы уже собрали большую часть костылей и шишек. Мы обрабатывали ей таблицы на сотни ГБ данных. Но там нужно много места на дисках.
Ответ написан
BojackHorseman
@BojackHorseman Куратор тега MySQL
...в творческом отпуске...
если нельзя потушить сервис даже не в прайм-тайм, чтобы заалтерить, то так и выкручиваются. кладут рядом вторую таблицу, все пишется в нее, потом потихоньку переливаются данные в новую. потом rename обратно. плагины на форках делают все тоже самое, если что.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы