XtraBackup — это утилита от Percona Labs, предназначенная для горячих бекапов таблиц InnoDB и XtraDB.
Установка
Загружаем последнею версию с официальной страницы http://www.percona.com/downloads/XtraBackup/
Использование
mysql-xtrabackup.sh
#!/bin/sh
# http://www.percona.com/software/percona-xtrabackup
#innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=[password] --rsync --compress --throttle=2 /var/backups/mysql/22
# --throttle=1 - для замедления и уменьшения нагрузки на процессов
# --compress -совместима только с --stream=xbstream, упаковывает хуже чем bzip2,
# совместно с bzip дает результат хуже чем один bzip2 и дает большую нагрузку на процессор.
# --xbstream=tar совместно с bzip2 дает максимальное сжатие, но не совместимо с шифрованием!
# bzip2 -s - для уменьшения использования оперативной памяти и снижении нагрузки н процессор при упаковке
# (только для небольших баз!, сильно увеличивается время упаковки
# --parallel=4 - запускать указанное кол-во параллельных процессов для ускорения (для многопроцессорных систем)
# Генерируем ключь для шифроваия резервной копии
#openssl enc -aes-256-cbc -pass pass:123 -P -md sha512 > encrypt.key
# Создаем резервную копию всех БД и упаковываем в xbstream.bz2
# innobackupex --defaults-file=/etc/mysql/my.cnf --socket=/var/run/mysqld/mysqld.sock \
#--user=root --password=ydvPj6fXW@Uwzhm --stream=xbstream --throttle=1 \
#/var/backups/mysql/22/ | bzip2 -zs9 - > /var/backups/mysql/22/66.xbstream.bz2
# --tmpdir=/var/backups/mysql/tmp
# Распаковываем бекап bzip2/xbstream (если использовали опцию --stream=xbstream)
#bzip2 -dkc /var/backups/mysql/22/66.xbstream.bz2 | xbstream -x -C /var/backups/mysql/22/11/
# Распаковываем чистый бекап xbstream, если дополнительно не использовали bzip2 или gzip (если использовали опцию --stream=xbstream)
#xbstream -x < /var/backups/backup.xbstream -C /var/backups/mysql/22/11/
# Создаем зашифрованную резервную копию всех БД и упаковываем в xbstream.bz2 и передаем в split для нарезки
# innobackupex --defaults-file=/etc/mysql/my.cnf --socket=/var/run/mysqld/mysqld.sock \
#--user=root --password=ydvPj6fXW@Uwzhm --stream=xbstream --compress --throttle=100 --encrypt=AES256 --encrypt-key-file=/etc/mysql/encrypt.key \
#/var/backups/mysql/22/ | bzip2 -zs9 | split -b 100m - /var/backups/mysql/22/66.xbstream.bz2
MYSQL_USER="login"
MYSQL_PSWD="password"
# Задаем лимит операций Input/Otput с жестким диском
IOS="2"
# Задаем лимит использования оперативной памяти
RAM_LIMIT="10MB"
# Задаем размер составного архива (для утилиты split)
VOLUME_SIZE="100m"
LOG="/var/log/mysql/innobackupex.log"
TMP_DIR="/tmp"
# Задаем каталог куда будем складывать резерные копии
DST="/var/backups/mysql"
# Указываем имя сервера (будет указано в имени архива)
NAME="NEMO"
INNOBACKUPEX="/usr/bin/innobackupex"
NICE="/usr/bin/nice -n 20"
BZIP2="/bin/bzip2"
SPLIT="/usr/bin/split"
# Удалить резервные копии старше 7 дней
find /var/backups/mysql/* -type f -mtime +7 -delete
# Создаем резервную копию всех БД и упаковываем в tar.bz2 и передаем в split для нарезки
$NICE $INNOBACKUPEX --defaults-file=/etc/mysql/my.cnf --socket=/var/run/mysqld/mysqld.sock \
--tmpdir=$TMP_DIR \
--use-memory=$RAM_LIMIT --throttle=$IOS \
--stream=tar \
--user=$MYSQL_USER --password=$MYSQL_PSWD \
$DST | $BZIP2 -zs9 | $SPLIT -b $VOLUME_SIZE - $DST/mysql_${NAME}_all_backup-$(date +"%H:%M-%d.%m.%Y").tar.bz2
# Склеиваем нарезанный архив
#cat /var/backups/mysql/mysql_all_backup.tar.bz2* > /var/backups/mysql/mysql_all_backup.tar.bz2
# Распаковываем архив бекамом БД tar.bz2
#tar -xijf /var/backups/mysql/mysql_all_backup.tar.bz2 -C /var/backups/mysql/22/
# Распаковываем бекап bzip2/xbstream (если использовали опцию --stream=xbstream)
#bzip2 -dkc /var/backups/mysql/22/66.xbstream.bz2 |
#innobackupex --decrypt=AES256 --encrypt-key-file=/etc/mysql/encrypt.key /var/backups/mysql/22/
#xbstream -x -C /var/backups/mysql/22/11/
# Распаковываем чистый бекап xbstream, если дополнительно не использовали bzip2 или gzip (если использовали опцию --stream=xbstream)
#xbstream -x < /var/backups/backup.xbstream -C /var/backups/mysql/22/11/
# Для подготовки бекапа к восстановлению, обрабатываем лог транзакций
#innobackupex --apply-log --use-memory=50MB /var/backups/mysql/22/
#Востанавливаем базы данных из бекапа (можно просто остановить сервер и вручную скопировать файлы)
#innobackupex --copy-back /path/to/BACKUP-DIR
# При необходимости меняем владельца файлов
#chown -R mysql:mysql /var/lib/mysql
|