Innobackupex backup script, restore DB
В этой части мы расскажем о том, как можно развернуть резервную копию базы данных самостоятельно на отдельном сервере с помощью инструмента Percona XtraBackup.
В MariaDB 10.1 и более поздних версиях mariabackup является рекомендуемым методом резервного копирования для использования вместо Percona XtraBackup.
Пример скрипта для бекапа с помощью innobackupex:
#!/bin/bash
BACKUPDIR=/var/backup/
MYCNF=/etc/my.cnf
INNOBACKUPEX=/usr/bin/innobackupex
USEROPTIONS="--user=root --password=PWD"
LOGFILE=/var/backup/xtrabackup.log
BKPFILE=/var/backup/mysql.full.tar.gz
if [ ! -d "$BACKUPDIR" ]; then
mkdir -p $BACKUPDIR
fi
if [ -f "$BKPFILE" ]; then
rm -rf $BKPFILE
fi
if [ ! -s "$LOGFILE" ]; then
touch $LOGFILE
fi
$INNOBACKUPEX --defaults-file=$MYCNF --host=127.0.0.1 $USEROPTIONS --stream=tar ./ 2> $LOGFILE | pigz -p 5 > $BACKUPDIR/mysql.full.tar.gz
На выходе получаем бекап в /var/backup/mysql.full.tar.gz.
Для восстановления бекапа:
1 Переносим бекап на новый сервер
rsync -av /var/mariabackup/fri/mysql.full.tar.gz root@new-server:/tmp/
2 Распаковываем архив
tar --use-compress-program=pigz -xif /tmp/mysql.full.tar.gz -C /tmp/mysql
3 Чтобы подготовить резервную копию с помощью innobackupex, вы должны использовать –apply-log и путь к каталогу резервных копий в качестве аргумента:
innobackupex --apply-log --use-memory=4G /tmp/mysql
4 Перемещаем файлы с резервной копии в корень mysql, –move-back удаляет файлы резервной копии
innobackupex --move-back /tmp/mysql
5 Восстанавливаем права
chmod 755 /var/lib/mysql
chown -R mysql:mysql /var/lib/mysql
chown -R mysql:mysql /var/log/mysql
chown -R mysql:mysql /tmp/mysql
find /var/lib/mysql -type d -exec chmod 750 {} \;
6 Запускаем сервер
Бекап крупной БД не всегда можно сделать локально, для таких целей существует функция потоковой передачи на резервный сервер.
innobackupex --defaults-file=/etc/my.cnf.d/server.cnf --host=127.0.0.1 --user=root --password=PWD --stream=tar ./ 2> /var/log/xtrabackup.log | ssh root@new-server \ "cat - > /tmp/mysql.full.tar"
После чего нужно использовать команды 2-6 и запустить сервер.