Резервное копирование баз данных с помощью Percona XtraBackup
Jul 14, 2015 22:23 · 327 words · 2 minute read
С помощью утилиты 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.
Готовый скрипт для создания полных и инкрементальных резервных копий можно взять здесь.
О том, как развернуть полную или инкрементальную копию базы данных, читайте здесь.