Percona Xtrabackup — утилита, позволяющая делать бэкапы InnoDB без блокирования таблиц и остановки MySQL. На сайте проекта Percona утилите посвящен отдельный раздел.
Xtrabackup можно использоваться на серверах с Percona Server, MySQL и MariaDB .
Утилита полезна для серверов с высокими нагрузками для которых характерны постоянные запросы к базе данных. При создании бэкапа стандартными средствами (mysqldump) все запросы, требующие изменения данных (UPDATE, DELETE, SET и т.д.) должны блокироваться.
Xtrabackup позволяет этого избежать. Бэкап создается для всех таблиц, что позволяет применять утилиту в кластерах серверов баз данных (Galera Cluster).
Характеристики 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, указание одной опции для этого движка практически лишает его недостатков.