Percona Xtrabackup и горячие бэкапы InnoDB

Percona Xtrabackup — утилита, позволяющая делать бэкапы InnoDB без блокирования таблиц и остановки MySQL. На сайте проекта Percona утилите посвящен отдельный раздел.

Xtrabackup можно использоваться на серверах с Percona Server, MySQL и MariaDB .

 

Утилита полезна для серверов с высокими нагрузками для которых характерны постоянные запросы к базе данных. При создании бэкапа стандартными средствами (mysqldump) все запросы, требующие изменения данных (UPDATE, DELETE, SET и т.д.) должны блокироваться.

Xtrabackup позволяет этого избежать. Бэкап создается для всех таблиц, что позволяет применять утилиту в кластерах серверов баз данных (Galera Cluster).

Percona Xtrabackup

 

Характеристики Xtrabackup:
  • таблицы InnoDB не блокируются совсем, для MyISAM к концу создания бэкапа приостанавливаются все операции на изменении
  • Xtrabackup сжимает данные и проверяет целостность получившихся бэкапов.
  •  поддерживает инкрементальные бэкапы
  • может отправлять сжатые бэкапы MySQL на внешний сервер
  • поддерживает шифрование
  • обеспечивает создание бэкапов без значительного роста нагрузки на сервер

 

Для Debian подобных систем утилита есть в репозиториии и может быть установлена из него

apt-get install percona-xtrabackup-24

 

 

Как создать полный бэкап

Данные MySQL по умолчанию размещаются в /var/lib/mysql, для восстановления используем каталог /data/backups/mysql/

Создание копии (выполняется из каталога /var/lib/mysql от имени root):

xtrabackup —backup —target-dir=/data/backups/mysql/

 

Подготовка данных (команда выполняется дважды — цель выполнения команды во второй раз в создании лога):

xtrabackup —prepare —target-dir=/data/backups/mysql/

xtrabackup —prepare —target-dir=/data/backups/mysql/

Log file ./ib_logfile0 did not exist: new to be created

 

Как восстановить данные из бэкапа

Прежде всего нужно остановить MySQL и очистить datadir, с которым он работает

/etc/init.d/mysql stop

rm -rf /var/lib/mysq/*

 

Далее копируем данные (с ключом —move-back их можно переместить не оставляя ничего в каталоге с бэкапом)

xtrabackup —copy-back —target-dir=/data/backups/

chown -R mysql: /var/lib/mysql

/etc/init.d/mysql start

 

Можно использовать любой альтернативный метод копирования : scp или rsync

 

 

Percona Xtrabackup и MyISAM

Для MyISAM блокировка на очень короткой промежуток времени, но происходит. Фактически это делается за счет выполнения запросов  FLUSH TABLES WITH READ LOCK; и UNLOCK TABLES;

Первый блокирует таблицы, второй блокировку снимает.

 

 

mysqlhotcopy для MyISAM

Альтернативное решение для быстрого создания копий MyISAM таблиц. Написано на Perl и использует блокировку LOCK TABLES, FLUSH TABLES

Копирует файлы со структурой таблиц, данные и индексы: *.frm, *.MYD и *.MYI

 

Из консоли запускается таким образом:

mysqlhotcopy db1 db2 db3 /home/backup

 

Оба решения: как Percona Xtrabackup, так и mysqlhotcopy для MyISAM предполагают блокировку таблиц поэтому лучше использовать InnoDB, указание одной опции для этого движка практически лишает его недостатков.