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



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

Данные 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, mysqlhotcopy использует блокировку LOCK TABLES, FLUSH TABLES

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



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

mysqlhotcopy db1 db2 db3 /home/backup


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

Сказать спасибо