Percona XtraBackup е утилита за горещо архивиране на бази данни MySQL.
По време на създаването на резервно копие на данните не се извършва блокиране на таблиците, системата ви продължава да работи без каквито и да било ограничения.
XtraBackup 2.4 може да създава резервни копия на таблици InnoDB, XtraDB и MyISAM на сървъри MySQL 5.11, 5.5, 5.6 и 5.7, а също и на сървър Percona за MySQL с XtraDB.
За работа с MySQL 8.x трябва да се използва версия XtraBackup 8.x. В тази статия ще става въпрос само за XtraBackup 2.4.
Основно предимство XtraBackup състои в това, че тази утилита е подходяща както за създаване на резервни копия на системи с високо натоварване, сървъритака и за системи с нисък обем на транзакции.
Ако общият размер на вашите бази данни MySQL е значителен (десетки гигабайти), стандартната утилита mysqldump няма да позволи бързо създаване на резервно копие, а възстановяването на дъмпа ще отнеме много време.
Инсталиране
Инсталиране XtraBackup от репозитория apt Percona.
Изпълнете последователно следните команди:
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
sudo apt-get update
sudo apt-get install percona-xtrabackup-242. След инсталацията изпълнете командата xtrabackup -v. Важно е да се уверите, че утилитата работи коректно на сървъра. В резултат на екрана ще се покаже нещо подобно:
xtrabackup: recognized server arguments: — datadir=/var/lib/mysql — tmpdir=/tmp — server-id=1 — logbin=/var/log/mysql/mysql-bin.log — innodbbufferpoolsize=16384M — innodbfilepertable=1 — innodbflushmethod=Odirect — innodbflushlogattrxcommit=0xtrabackup version 2.4.20 based on MySQL server 5.7.26 Linux (x8664) (revision id: c8b4056)

Права за достъп, разрешения и привилегии
XtraBackup трябва да има възможност да:
Се свърже със сървъра MySQL.
Да има права за достъп до директорията datadir.
При създаването на резервно копие да има права за запис в указаната чрез параметъра target-dir директория.
Какво е datadir?
datadir — това е директория, в която сървърът на бази данни MySQL съхранява данни. Всички бази данни, всички таблици са там. В повечето дистрибуции на Linux по подразбиране такава директория е /var/lib/mysql.
Какво е директорията target-dir?
target-dir — това е директория, в която ще бъде запазено резервното копие.
На потребителя на базата данни са необходими следните права за достъп до таблиците и базите данни, които ще се архивират:
RELOAD и LOCK TABLES
REPLICATION CLIENT
CREATE TABLESPACE
PROCESS
SUPER
CREATE
INSERT
SELECT
Конфигурация
Конфигурация XtraBackup се извършва с помощта на опции, които работят по същия начин, както стандартните параметри на MySQL.
Какво означава това?
Конфигурационните параметри могат да бъдат зададени или в командния ред, или в конфигурационния файл на СУБД, например в /etc/my.cnf.
Утилитата XtraBackup след стартиране чете разделите [mysqld] и [xtrabackup] от конфигурационните файлове на MySQL. Това се прави, за да може утилитата да използва настройките на вашата СУБД, без да е нужно ръчно да задавате параметри при всяко резервно копиране.
Например, стойността datadir и някои параметри InnoDB XtraBackup получаваме от конфигурацията на вашата СУБД.
Ако искате да преопределите параметри за работа на XtraBackup, които се намират в секцията [mysqld], просто ги задайте в конфигурационния файл в секцията [xtrabackup]. Тъй като те ще бъдат прочетени по-късно, техният приоритет ще бъде по-висок.
Не е нужно да добавяте никакви параметри в my.cnf. Всички необходими параметри могат да бъдат задавани в командния ред. Обикновено единственото, което е удобно да се постави в секцията [xtrabackup] вашия my.cnf — е параметърът target_dir, който по подразбиране определя директорията, в която ще бъдат поставени резервните копия. Но това не е задължително.
Пример за задаване на пътя към директорията с резервно копие в my.cnf:
[xtrabackup]
target_dir = /data/backups/mysql/Сценарий за създаване на резервно копие
За да създадете резервно копие, можете да използвате следния сценарий:
#!/bin/bash
# Удаляем данные в каталоге бекапа
rm -rf /mysql/backup
# Cоздаём бекап
xtrabackup --user=xtrabackup
--password=xxxx_SECRET_xxxx
--backup
--target-dir=/mysql/backup
# Выполняем подготовку бекапа для развёртывания
xtrabackup --prepare --target-dir=/mysql/backup
# Создаём архив
tar -zcvf /home/developer/dumps/xtrabackup-all-dbs-"$(date +%F-%H:%M:%S)".gz /mysql/backupКакво се случва по време на изпълнението на сценария?
Първо, ние почистваме (изтриваме) директорията, в която ще запазим резервното копие:
rm -rf /mysql/backup.
След това, с помощта на утилитата XtraBackup създаваме резервно копие и го запазваме в /mysql/backup/:
xtrabackup --user=xtrabackup --password=xxxxz1cYf95550Gc6xxxxxxxpE3rB03xxxx --backup --target-dir=/mysql/backupПредварително в MySQL сме създали потребител xtrabackup с необходимите привилегии. С параметъра target-dir указваме директорията, в която трябва да се запази резервното копие.
Важно уточнение!
Обърнете внимание на реда в сценария:
xtrabackup --prepare --target-dir=/mysql/backup
Данните в директорията /mysql/backup не са консистентни, докато не бъдат подготвени.
Факт е, че по време на копирането на файловете е възможно да са настъпили промени. Операцията xtrabackup --prepare --target-dir=/mysql/backup прави резервното копие идеално синхронизирано във времето.
Можете да извършите операцията по подготовка на данните на всяка машина. Няма нужда да правите това на сървъра, където се намира оригиналната СУБД. Можете да копирате резервното копие на целевия сървър и да го подготвите там.
Последното, което правим, е да създадем архив, в който поставяме нашето резервно копие:
tar -zcvf /home/developer/dumps/xtrabackup-all-dbs-«$(date %F%H%M%S)».gz /mysql/backupВъзстановяване на резервно копие
Преди да започнете възстановяването на резервно копие на целевия сървър, данните трябва да преминат през етап на подготовка. Как да го направите, вижте по-горе.
Процесът на възстановяване на данни е много прост. Необходимо е да извлечете резервното копие от архива и да замените данните в datadir.
Как да заменим данните в datadir?
Нека разгледаме два варианта.
Вариант 1
Да използваме утилитата XtraBackup. Трябва да посочите опцията —copy-back.
Командата по-долу ще премести резервното копие в datadir целевия сървър:
xtrabackup --copy-back --target-dir=/mysql/backupВариант 2
Може да се направи и по различен начин, без утилита XtraBackup.
Всичко, което трябва да направите, е да копирате резервното копие в datadir. Можете да направите това с cp или rsync.
Важно е да разберете, че процедурата по възстановяване на резервното копие се свежда единствено до замяна на съдържанието на каталога datadir.
Преди да започнете възстановяването на резервно копие на целевия сървър, е необходимо:
Да спрете MySQL сървъра.
Да изчистите папката datadir или да преместите нейното съдържание на друго място. Каталогът datadir задължително трябва да бъде празен.
След завършване на прехвърлянето на данните в datadir сървър MySQL може да бъде стартиран.
Използвани материали
.
Източник: habr.com
