l3ftoverz
@l3ftoverz
Люблю Финский металкор

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

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

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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы
26 февр. 2020, в 05:15
5000 руб./за проект
26 февр. 2020, в 01:14
600 руб./в час
26 февр. 2020, в 01:13
1500 руб./за проект