Бэкап и перенос InnoDB таблиц

Возникла на работе проблема: на нашем сервере мониторинга после грубого отключения питания HDD стал чувствовать себя не очень. И надо же такому случится, что сбойные сектора оказались именно на месте 8-гиговой базы Zabbix. Сама база использовала движок InnoDB и хранила данные в shared-хранилище(один огромный файл). Были ли бэкапы, спросите вы? Конечно были. Только как оказалось, бэкапить на уровне файловой системы только хранилище данных(вместе с бинарными журналами) оказалось плохой идеей: после восстановления этого бэкапа, MySQL падал при любой попытке чтения некоторых(не всех) таблиц из этой базы даже при установленном максимальном уровне режима восстановления (innodb_force_recovery=6). Хорошо, что бэкапов было несколько и мне удалось сдампить все таблицы из разных версий бэкапа.

По результатам разбирательства с этой проблемой возник вопрос, а как вообще можно бэкапить innodb-таблицы кроме традиционного способа с помощью mysqldump(и сопутствующим восстановлением в течении 4 часов этого дампа)? Первый напрашивающийся вариант — остановить сервер БД и сделать бэкап на уровне ФС не «проканал», т.к. после восстановления бэкапа на чистой инсталляции, MySQL точно так же падал при попытке чтения из этой БД.

Дальнейшее гугление привело на сайт компании Percona. Эти ребята(кстати некоторые разработчики — наши соотечественники) предлагают отличное opensource-решение для «горячего» бэкапа БД, использующего движок InnoDB(он же XtraDB) — XtraBackup. После бэкапа БД этой утилитой, данные удалось перенести на чистую инсталляцию и что немаловажно — не останавливая сервер БД источника. Эта утилита так же хороша тем, что умеет делать инкрементальные бэкапы.

Пару слов о том, как работает эта утилита. С ее помощью копируются файлы данных, а затем сканируется бинарный журнал транзакций и резервируется вместе с этими данными. Для восстановления данных этот журнал нужно применить к файлам данных, а затем скопировать данные и и бинарные логи в рабочую папку сервера БД.

Теперь о минусах этой утилиты: она собрана только под популярные дистрибутивы Linux. Если вы захотите воспользоваться ей во FreeBSD, вам придется собирать ее самостоятельно. В принципе делается это довольно легко, т.к. в поставке с исходными кодами идет скрипт автоматической компиляции.

В заключении хочу дать несколько советов.

  1. Если это возможно, разделяйте файлы хранилища данных(опция innodb_files_per_table), т.к. возится с огромным файлом данных довольно муторная работа, которая еще и очень требовательна к ресурсам.
  2. Используйте движок InnoDB только, если это оправдано насущной необходимостью, иначе лучше хранить данные в MyISAM, т.к. их намного легче переносить и восстанавливать.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.