Настройка в системе FreeBSD XtraBackup.
Менеджеры начали жаловаться, что местами проект подтормаживает, эти места приходились на бэкап базы, база не маленькая 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 - Разрешаем использовать определенное количество оперативной памяти.
Вот и вся настройка в FreeBSD XtraBackup для больших баз данных.
Осталось подготовить бэкап к рабочему состоянию, добавляем недостающие транзакции, которые были сделаны на момент создания бэкапы.
Как?