web_dev
@web_dev

Ускорение миграции/изменения таблиц в MySQL?

Хочется улучшить/ускорить миграцию MySQL базы данных.
У нас стандартный подход, скрипты в liquibase, выкатывается новая версия, скрипты запускаются.

Но продуктивная БД достаточно большая и изменение таблицы(добавление колонки, изменение значений) с 10-15 миллионами записей может длится часами. Что приводит к блокировке таблицы и так д. Поэтому деплой с изменениями стараются делать когда не слишком много запросов и так д.
Хотя имеется достаточно продуктивный Galera Cluster.
Решит ли частично проблемы переезд с MySQL на PostreSQL?
  • Вопрос задан
  • 791 просмотр
Пригласить эксперта
Ответы на вопрос 4
По мускул нашёл такие не слишком простые варианты
https://m.habr.com/ru/post/121129/

Postgresql частично решит проблемы.мно только в случае добавления нового столбца в таблицу и без значения по умолчанию. Такой Alter вызовет лишь кратковременные блокировку для изменения метаданных таблицы. Т.е. сперва создаётся пустой столбец, а затем порциями туда начинаете мигрировать данные и в конце, при необходимости, выставляете Default значение.
В помощь таким миграция будет правило - поддерживать на уровне БД и кода версии базы n и n-1. Это ещё упростит и случаи когда придётся откатываться на прошлую версию ПО.
Ответ написан
Попробуйте.
https://github.com/github/gh-ost
Используем для миграции нагруженных таблиц.
Ответ написан
ayazer
@ayazer
Sr. Software Engineer
1) гитхабовский gh-ost.
+: работает через бинарный лог, потому может мигрировать таблицу даже если в ней есть триггеры.
-: работает через бинарный лог, потому (относительно) медленный т.к. в какой-то момент начинает переливать данные где-то с такой-же скоростью как они появляются.

2) перконовская pt-online-schema-change
+: работает через триггеры (которые умеют грузить все доступные ядра)
-: работает через триггеры, потому если триггеры уже есть - использовать перкону не выйдет.

в обоих случаях создается копия таблицы, может быть проблемой если таблицы по паре Тб.

+ в новых версиях Mysql можно использовать online ddl для тех-же задач.
Ответ написан
xenozauros
@xenozauros
Админю, пишу на питоне, вот это вот все...
Делал такое через обычную асинхронную мастер-мастер репликацию.
Приложение работает с мастером 1. Останавливаем на нем слейва, накатываем миграцию на мастер 2. Переключаем приложение на мастер 2, включаем слейва на мастере 1, ждём, что он догнал, проверяем, что ничего не поломалось. Переключаем приложение на мастер 1.
Для переключения прекрасно подходит какой-нибудь haproxy.
Ответ написан
Ваш ответ на вопрос

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

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