• Регистрация

1,074 вопросов

1,433 ответов

1,281 комментариев

8,741 пользователей

Добро пожаловать на Ubuntu Ответы, где вы можете задать вопросы и получить ответы от других пользователей сервиса.

Создание резервной копии БД MySQL «на лету» с помощью Percona XtraBackup (Innobackupex)

0 голосов

Резервное копирование данных является неотъемлемой частью функционирования различных проектов. Рассмотрим процесс создания резервной копии БД MySQL с помощью Percona XtraBackup. Для бэкапирования больших БД подойдет и вариант репликации и создания дампа на удаленном сервере не нагружая и не блокируя таблицы на основном сервере. Однако, не всегда есть возможность держать отдельный сервер для репликации. В таком случае нам понадобится установить утилиту percona-xtrabackup. Описание процесса установки приведено на сайте разработчиков, поэтому на установке детально останавливаться не будем.

Суть использования Percona XtraBackup состоит в том, что это ПО дает возможность сделать полную резервную копию БД не прибегая к блокировке таблиц и настройке репликации. Такая возможность достигается путем записи в процессе бэкапирования лога изменений, которые вносятся в БД с момента начала создания резервной копии, с последующим «накатыванием» этих изменений на созданную резервную копию. Таким образом MySQL не останавливается и не блокируется. В то же время мы делаем полную копию БД с учетом изменений, которые происходили в процессе создания резервной копии.

Для бэкапирования заведем отдельного пользователя MySQL:
 

mysql -u root -p
mysql> CREATE USER 'backup'@'localhost' IDENTIFIED BY 'PASS';
mysql> GRANT ALL PRIVILEGES ON * . * TO 'backup'@'localhost' IDENTIFIED BY 'PASS';

 
Для автоматизации процесса создадим скрипт с таким содержимым:

#!/bin/bash
innobackupex --user=backup --password=PASS --no-timestamp /home/mysql-backup/full
tar -czf /home/mysql-backup/archives/`date +%F`-mysql_backup.tar.gz /home/mysql-backup/full

который делает резервную копию и сжимает ее в архив с пометкой даты, когда было выполнено бэкапирование.

Внесем этот скрипт в cron:

0 4 * * * /root/scripts/mysql-backup.sh >> /var/log/mysql-backup.log 2>&1

Процесс восстановления БД из бэкапа состоит из таких действий:

  1. «Накатываем» изменения лог-файла для полного бэкапа не начиная процедуру восстановления (применяем изменения, которые произошли в процессе создания бэкапа):
    • innobackupex --apply-log --redo-only /home/mysql-restore/full/
  2. Выполняем применение лога с процедурой восстановления для внесения необходимых измененеий в соответствующие таблицы:

    • innobackupex --apply-log /home/mysql-restore/full/

После процедуры восстановления в /home/mysql-restore/full/ получаем файлы, которые можно прямо переносить в /var/lib/mysql, назначать владельца и запускать БД.

Вопрос Mar 10, 2016 от sir_mcnellan Ветеран (8,680 баллов) в категории Серверные системы
   

Пожалуйста войдите или зарегистрируйтесь для ответа на этот вопрос.

...