mitaichik
@mitaichik

Как быстро изменить схему таблиц?

Добрый день.

Есть таблица, вроде не особо большая (примерно 1.5Gb, 2.5 млн записей), но она прям боевая.
Недавно добавляли туда поле - заняло примерно 20 мин.

Сейчас надо разбить ее на две таблицы, некоторые поля снести, некоторые добавить.
А простой в час-полтора не позволителен.

Подскажите как побыстрее сделать апдейт?
Напрямую - долго.

Есть мысль остановить запись в нее (чтение оставить, чтоб не потерять работу остальных сервисов) , сделать дубликат, его уже менять - плохо, но уже лучше.

Есть мысль скачать ее на локальный комп, поменять (сервер не особо мощный, а офисе компы дикие стоят), и залить снова...

В общем, поделитесь опытом, как лучше поступить?
  • Вопрос задан
  • 85 просмотров
Решения вопроса 2
ayazer
@ayazer
Sr. Software Engineer
есть 2 проверенных варианта:
1) github gh-ost.
2) percona toolkit

обе создадут новую таблицу, и дальше начнут переливать в нее все данные (не мешая при этом работе старой). в момент когда обе таблицы дойдут до одинакового состояния- они поменяются местами.
разница в том, как они работают.

percona toolkit - работает через триггеры. потому мигрировать таблицу для которой уже есть триггеры не выйдет. но зато она работает быстрее

gh-ost - читает бинлог. соотв. будет работать даже если есть триггеры, но работать будет медленно (в моем случае он переливал данные с где-то с такой-же скоростью как они добавлялись)

в итоге я в свое время использовал для миграций перкону. миграции мелких таблиц в пару гигабайт проходили в течении 10-15 минут незаметно для бекенда.
Ответ написан
@vitaly_il1
DevOps Consulting
https://www.percona.com/doc/percona-toolkit/3.0/pt...

умеет разбивать alter table на мелкие chunks и не мешает работать с базой
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы