Согласованное логическое резервное копирование баз данных, использующих движки MyISAM и InnoDB

8

У меня есть вопрос, касающийся логического резервного копирования баз данных MySQL, которые используют MyISAM и InnoDB.

mysqldumpУтилита поддерживает эти два варианта:

  • --single-транзакция - создает непротиворечивый снимок путем выгрузки всех таблиц в одной транзакции. Работает ТОЛЬКО для таблиц, хранящихся в механизмах хранения, которые поддерживают многовариантность (в настоящее время поддерживает только InnoDB) [...] Опция автоматически отключает --lock-таблицы.

  • -x, --lock-all-tables - блокирует все таблицы во всех базах данных. Это достигается за счет глобальной блокировки чтения на время всего дампа. Автоматически отключает --single -action и --lock-таблицы.

    • Для InnoDB нам нужно --single-transaction

    • для MyISAM нам нужны - таблицы блокировок или таблицы блокировок (в случае необходимости согласованности между базами данных).

Итак, как создать резервную копию гибридной базы данных (базы данных, использующей механизмы MyISAM и InnoDB)?

Редактировать:

Просто чтобы уточнить, вопрос можно переформулировать так:

Гарантируют ли опции блокировки [all-] таблиц последовательное резервное копирование таблиц InnoDB?

Димитр Радулов
источник

Ответы:

8

С mysqldump вы можете безопасно использовать только --single-transactionесли все ваши таблицы InnoDB, в противном случае ваша резервная копия не согласована.

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

Примечание: если у вас есть гибридный микс, возможно, посмотрите на xtrabackup. Он будет блокироваться только на этапе резервного копирования MyISAM.

Морган Токер
источник
Как раз собирался опубликовать это, но вы опередили меня. Соответствующая ссылка: percona.com/doc/percona-xtrabackup/innobackupex/…
Дерек Дауни
Спасибо за подтверждение того, что таблицы блокировки гарантируют согласованное резервное копирование для обоих двигателей. В настоящее время я смотрю на Zmanda Recovery Manager для MySQL (я также посмотрю на xtrabackup).
Дмитрий Радулов
Zmanda - это всего лишь менеджер GUI для всех других методов резервного копирования - я уверен, что использование xtrabackup поддерживается.
Морган Токер
Привет @Morgan Tocker, Zmanda также предоставляет набор скриптов (zrm- *), которые на самом деле выполняют различные типы резервного копирования: логическое, raw и снимки. Все базы данных, которые мы администрируем, являются гибридными, поэтому использование отдельного продукта не имеет особой ценности - мы не можем избежать блокировки во время резервного копирования.
Дмитрий Радулов
Этот ответ говорит, что если использовать mysqldump и указать, --lock-all-tablesто резервное копирование будет согласованным, верно? И нужно запускать mysqldump только один раз: это будет безопасно для InnoDB и MyISAM одновременно, верно?
КаджМагнус
2

В качестве дополнительной идеи для вашей ситуации, может быть, полезно потратить некоторые мысли на настройку конфигурации главного подчиненного, где резервная копия создается из подчиненного.

База данных MySQL с сочетанием InnoDB и MyISAM всегда (насколько я знаю в каждой конфигурации и с каждым инструментом резервного копирования) блокирует таблицы MyISAM для фазы резервного копирования MyISAM.

Чтобы избежать этой блокировки, используйте эту настройку:

  • Сервер A: Мастер MySQL
  • Сервер B: MySQL Slave (подключен к Серверу A)

Все записи и чтения отправляются на сервер A (мастер). Сервер B (подчиненный) используется только для резервного копирования. На ведомом устройстве вы устанавливаете инструмент резервного копирования или скрипт по вашему выбору, например, MySQL Administrator.

Настройте резервную копию, например, ежедневно в ночное время. Блокировки на ведомом устройстве приводят к задержке, в то время как ведомая блокировка блокируется, но эта задержка обнаруживается, как только резервное копирование закончено и блокировка открыта.

Рафаэль Мейер
источник