Изменение таблицы MySQL InnoDB с минимальным временем простоя - PullRequest
6 голосов
/ 26 июля 2011

У меня есть огромная таблица InnoDB (> 500 миллионов строк), которую я хотел бы разделить по хешу, чтобы уменьшить размер индекса.Я хотел бы добиться этого с минимальным временем простоя (например, 10 минут приемлемо), каковы возможные варианты?

Я думал о чем-то следующем:

  1. создатьновая многораздельная таблица
  2. вставьте в эту новую таблицу все данные из старой таблицы, используя "insert ... select ..."
  3. , чтобы сделать сервер недоступным для клиентов
  4. каким-то образом синхронизирует изменения, произошедшие со старой таблицей на шаге 2, с новой таблицей
  5. замените старую таблицу новой
  6. сделайте сервер доступным для клиентов

Основной вопрос - какой инструмент можно использовать на шаге 4. Проблема в том, что на шаге 2 может быть много изменений в исходной таблице: новые вставки, обновления, удаления - инструмент синхронизации должен взять всеэто во внимание ...

Другой возможный способ, на мой взгляд, заключается в следующем:

  1. настройка реплицирующего подчиненного сервера
  2. синхронизация этого подчиненного сервера с ведущим
  3. переключатель главный / подчиненныйролей и переконфигурируйте всех клиентов для подключения к новой мастер-таблице
  4. на предыдущем мастере
  5. дождитесь синхронизации master / slave
  6. снова переключите главные / подчиненные роли,перенастроить все клиенты

Какой из них вы бы порекомендовали?

1 Ответ

1 голос
/ 28 июля 2011

Я бы пошел с репликацией master / slave. Если ведущий и ведомый могут находиться в одной подсети, я бы также добавил новый IP-адрес в ведущий, изменив клиентов так, чтобы они указывали на новый IP-адрес. Затем, когда вы собираетесь переключиться на раб, просто:

  1. останов MySQL на мастере

  2. ifconfig вниз по дополнительному IP на ведущем устройстве

  3. ifconfig up дополнительный IP на новом мастере

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

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

...