FreeBSD XtraBackup

Дата | 10.12.2016

Менеджеры начали жаловаться, что местами проект подтормаживает, эти места приходились на бэкап базы, база не маленькая 90Гиг.
Бэкап занимал порядка часа два.
Копии базы создавались по-простому с помощью дампа.
В целях экономии проекта слэйв сервера нет, было бы лучше с ним, с него делать бэкапы.
Решил бэкап базы mysql перевести на xtrabackup, весьма удобно.
Но для начало нужно включить в mysql бинарные логи.
Установим.

# cd /usr/ports/databases/xtrabackup && make install clean

Делаем полный бэкап всех баз данных на сервере.

/usr/local/bin/innobackupex --user=пользователь_базы --password=НАШ_ПАРОЛЬ_ОТ_БАЗЫ --no-timestamp /mnt/backup/www/base_full

Но я не убираю временную метку no-timestamp.
В конце выполнения команды увидим сообщение innobackupex: completed OK!.
Осталось подготовить бэкап к рабочему состоянию, добавляем недостающие транзакции, которые были сделаны на момент создания бэкапы.
Далее «приготавливаем» бекап путем обработки лога транзакций, который на этом этапе хранится в файле

innobackupex --apply-log /mnt/backup/www/base_full

Но лучше сделать по отдельности базы.

innobackupex --defaults-file=/etc/my.cnf --socket=/tmp/mysql.sock --user=Пользователь --password=ПАРОЛЬ --databases "DB_TEST" --compress --compress-threads=8 --stream=xbstream --parallel=4 --lock-wait-timeout=60 /mnt/backup/sql/

Добавим транзакции из лога, которые накопились за время создания копии базы.

innobackupex --apply-log --redo-only --defaults-file=/etc/my.cnf --user=Пользователь --password=ПАРОЛЬ --throttle=40 /mnt/backup/sql/

Процесс восстановления такой.
Остановим базу.

# /usr/local/etc/rc.d/mysql-server stop

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

# mv /var/db/mysql/ /mnt/back/mysql_old_$DATE

Переносим нашу созданную утилитой innobackupex копию базы.

# mv /mnt/backup/sql/* /var/db/mysql/

Или с помощью утилиты innobackupex восстанавливаем файлы базы.

innobackupex --copy-back /mnt/backup/sql/

Сделаем, изменим нужные права базы.

# chown -R mysql:mysql /var/db/mysql/

Запуск базы, проверяем проделанную работу.

# /usr/local/etc/rc.d/mysql-server start

Дополнительные опции, которыми я пользуюсь.

--databases - Указываем какую базу сохранять.
--user=пользователь - с помощью которого будит происходить создания копии базы.
--password=пароль пользователя к базе данных.
--defaults-file=/etc/my.cnf - Указываем нашей утилите по бэкапу где лежит конфигурационный файл базы, по умолчанию /etc/my.cnf .
--no-timestamp - Не используем временную метку при создадим бэкапа, то есть если не использовать этот параметр то база будит создаваться в директории 2016-12-11_16-21-38
--rsync - Копирует с помощью rsync не транзакционные данные. Копирования происходит в несколько этапов, до блокировки копируется основную часть, внутри блокировки дельта копируется – В ПОТОКОВОМ РЕЖИМЕ НЕ РАБОТАЕТ.
--parallel=6 параллельное копирование, имеет смысл только с innodb_file_per_table=1
--no-lock
--throttle - Редко пользуюсь, этот параметр регулирует нагрузку на диск.
--compress - Сжимаем наши копии.
--copy-back - Этот параметр для восстановления 
--apply-log 
--redo-only
--lock-wait-timeout=60 Будит ждать 60 секунд, когда не будит больших запросов и выполнит (FLUSH TABLES WITH READ LOCK). Если в течении 60 секунд не получилось выждать момента, то команда завершится.
--use-memory - Разрешаем использовать определенное количество оперативной памяти.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *