Есть таблица, вроде не особо большая (примерно 1.5Gb, 2.5 млн записей), но она прям боевая.
Недавно добавляли туда поле - заняло примерно 20 мин.
Сейчас надо разбить ее на две таблицы, некоторые поля снести, некоторые добавить.
А простой в час-полтора не позволителен.
Подскажите как побыстрее сделать апдейт?
Напрямую - долго.
Есть мысль остановить запись в нее (чтение оставить, чтоб не потерять работу остальных сервисов) , сделать дубликат, его уже менять - плохо, но уже лучше.
Есть мысль скачать ее на локальный комп, поменять (сервер не особо мощный, а офисе компы дикие стоят), и залить снова...
есть 2 проверенных варианта:
1) github gh-ost.
2) percona toolkit
обе создадут новую таблицу, и дальше начнут переливать в нее все данные (не мешая при этом работе старой). в момент когда обе таблицы дойдут до одинакового состояния- они поменяются местами.
разница в том, как они работают.
percona toolkit - работает через триггеры. потому мигрировать таблицу для которой уже есть триггеры не выйдет. но зато она работает быстрее
gh-ost - читает бинлог. соотв. будет работать даже если есть триггеры, но работать будет медленно (в моем случае он переливал данные с где-то с такой-же скоростью как они добавлялись)
в итоге я в свое время использовал для миграций перкону. миграции мелких таблиц в пару гигабайт проходили в течении 10-15 минут незаметно для бекенда.