Створення резервної копії MySQL за допомогою утиліти XtraBackup

Percona XtraBackup - це утиліта для гарячого резервного копіювання баз даних MySQL.

Під час створення резервної копії даних не відбувається блокування таблиць, ваша система продовжує працювати без будь-яких обмежень.

XtraBackup 2.4 може створювати резервні копії таблиць InnoDBXtraDB и MyISAM на серверах MySQL 5.11, 5.5, 5.6 та 5.7, а також на сервері Перкона для MySQL с XtraDB.

Для роботи з MySQL 8.x слід використовувати версію XtraBackup 8.x. У цій статті мова піде лише про XtraBackup 2.4.

Головна перевага XtraBackup полягає в тому, що ця утиліта підходить як для створення резервних копій високо навантажених серверів, так і для систем із низькою кількістю транзакцій.

Якщо загальний розмір ваших баз даних MySQL значний (десятки гігабайт), то стандартна утиліта mysqldump не дозволить швидко виконати створення резервної копії, а відновлення дампа вимагатиме багато часу.

Встановлення

Встановлення XtraBackup з репозиторію схильний Перкона.

Виконайте послідовно такі команди:

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-24

2. Після встановлення виконайте команду 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 базований на MySQL Server 5.7.26 Linux (x8664) (revision id: c8b4056)

Створення резервної копії MySQL за допомогою утиліти XtraBackup

Права доступу, дозволу та привілеї 

XtraBackup повинна мати можливість:

  • Підключитись до вашого сервера MySQL.

  • Мати права доступу до каталогу каталог даних

  • Під час створення резервної копії мати право на запис у вказаний через параметр цільовий реж каталог.

Що таке datadir?

каталог даних - Це каталог, в якому сервер баз даних MySQL зберігає дані. Усі бази даних, усі таблиці знаходяться там. У більшості дистрибутивів Linux за умовчанням таким каталогом є /var/lib/mysql.

Що таке target-dir каталог?

цільовий реж — це каталог, до якого буде збережено резервну копію.

Користувачеві бази даних необхідні такі права доступу до таблиць та баз даних, що підлягають резервному копіюванню:

  • RELOAD та LOCK TABLES

  • REPLICATION CLIENT

  • CREATE TABLESPACE

  • ПРОЦЕС

  • СУПЕР

  • CREATE

  • INSERT

  • ВИБІР

Конфігурація 

Конфігурація XtraBackup виконується за допомогою опцій, які поводяться так само, як стандартні параметри MySQL.

Що це означає?

Параметри конфігурації можуть бути вказані або в командному рядку, або у файлі конфігурації СУБД, наприклад в /etc/my.cnf.

Утиліта XtraBackup після запуску зчитує розділи [mysqld] и [xtrabackup] із конфігураційних файлів MySQL. Це робиться для того, щоб утиліта могла використовувати налаштування СУБД без необхідності вказівки параметрів руками при кожному резервному копіюванні.

Наприклад, значення каталог даних та деякі параметри InnoDB XtraBackup отримуємо із конфігурації вашої СУБД.

Якщо для роботи XtraBackup ви хочете перевизначити параметри, що знаходяться у секції [mysqld], то просто вкажіть їх у конфігураційному файлі у секції [xtrabackup]. Оскільки вони будуть прочитані пізніше, їхній пріоритет буде вищим.

Ви можете не додавати жодних параметрів у my.cnf. Усі необхідні параметри можна вказувати в командному рядку. Зазвичай єдине, що може бути зручно розмістити у розділі [xtrabackup] вашого my.cnf - Це параметр цільовий_каталог, який за замовчуванням визначає каталог, до якого будуть розміщені резервні копії. Але це необов'язково.

Приклад вказівки шляху до каталогу з резервною копією 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?

Розглянемо два варіанти.

Варіант 1

Скористатися утилітою XtraBackup. Потрібно вказати опцію -copy-bask

Команда нижче перенесе резервну копію до каталог даних цільового сервера:

xtrabackup --copy-back --target-dir=/mysql/backup

Варіант 2

Можна зробити інакше, обійтися без утиліти XtraBackup.

Все, що вам потрібно - це скопіювати резервну копію в каталог даних. Ви можете зробити це за допомогою cp або rsync.

Важливо розуміти, що процедура відновлення резервної копії зводиться лише до заміни вмісту каталогу каталог даних.

Перед початком відновлення резервної копії на цільовому сервері необхідно:

  • Зупинити MySQL сервер.

  • Очистити папку каталог даних або перенести її вміст до іншого місця. Каталог каталог даних обов'язково має бути порожнім.

Після завершення перенесення даних у каталог даних сервер MySQL можна запустити.

Використовувані матеріали

Офіційна документація Перкона XtraBackup.

Джерело: habr.com

Додати коментар або відгук