в backup, bash, mysql

Резервное копирование базы данных с помощью Percona XtraBackup

percona-xtrabackup
С помощью утилиты Percona XtraBackup можно делать резервные копии баз данных в Highload-проектах, которые требуют минимального времени восстановления и безостановочной работы приложения.

В таких проектах размеры баз данных измеряются десятками гигабайт и использование утилиты mysqldump нецелесообразно, так как снятие дампа и восстановление данных может занимать далеко не один час (к тому же, mysqldump вызывает блокировку таблиц в процессе использования). Давайте разберемся с этим!

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

Синтаксис команды следующий:

/usr/bin/innobackupex [параметры] [путь_для_бекапа]

Параметры:

  • --port — порт для подключения к БД;
  • --socket — сокет для подключения к БД;
  • --host — хост для подключения к БД;
  • --defaults-file — с этим ключом можно указать конфигурационный файл для innobackupex, при использовании обязательно должен стоять первым в списке параметров;
  • --use-memory — позволяет указать кол-во оперативной памяти для осуществления операции (по умолчанию равно 100М), может значительно ускорить восстановление из резервной копии;
  • --no-lock — не блокировать таблицы в момент создания резервной копии;
  • --no-timestamp — ключ указывает, что не нужно создавать поддиректорию с временной меткой;
  • --rsync — используется для копирования файлов БД отличных от типа InnoDB (например, таблиц MyISAM), копирует часть до блокировки, копирует часть внутри блокировки. Не работает в потоковом режиме!;
  • --parallel — использовать параллельное копирование (имеет смысл только с параметром innodb_file_per_table);
  • --compress — с версии 2.0 доступна компрессия данных.

Примеры работы:

  • создание полной резервной копии:
/usr/bin/innobackupex --user=USER --password=PASSWORD /temp/
  • создание полной резервной копии и ее сжатие для экономии места
/usr/bin/innobackupex --user=USER --password=PASSWORD --stream=tar ./ | pigz -p 5 > /temp/mysql.full.tar.gz
  • создание инкрементальной резервной копии
/usr/bin/innobackupex --user=USER --password=PASSWORD --incremental --incremental-lsn=$LSN --stream=xbstream ./ > /temp/mysql.xbstream

, где переменная $LSN хранит последнее значение log sequence number.

Готовый скрипт для создания полных и инкрементальных резервных копий можно взять здесь.

О том, как развернуть полную или инкрементальную копию базы данных, читайте здесь.

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