в backup, bash, mysql, scripts

Cкрипт для создания резервных копий баз данных с помощью Percona XtraBackup

script
О создании резервных копий баз данных (бекапов) с помощью утилиты Percona XtraBackup я уже писал ранее, теперь выкладываю пример готового скрипта, которым пользуюсь и в настоящее время.

Скрипт предназначен для создания резервных копий баз данных (в субботу — полная резервная копия, в остальные дни — инкрементальные).

#!/bin/bash
# Скрипт делает резервную копию БД
# если сервер MySQL не запущен, то выходим

MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
ping_output=`$MYADMIN ping 2>&1`; ping_alive=$(( ! $? ))

if [ $ping_alive = 0 ]; then
    logger -t mysql-backup 'MYADMIN ping FAIL'
    exit
fi

BACKUP="/usr/bin/innobackupex-1.5.1 --no-lock"
workdir="/usr/local/tmp/"

DofW=`date +'%u'`
full=0
incr=0
# если суббота - делаем полный бекап, иначе инкрементальный
if [ "$DofW" = "6" ];
then
    full=1
    logger -t mysql_backup 'make full backup'
else
    incr=1
    logger -t mysql_backup 'make incremental backup'
fi

if [ $full == '1' ];
then
    logger -t mysql_backup 'start mysql full backup'
    dump="mysql"`date +%Y%m%d`"full.tar"
    ext=".gz"
# при распаковке использовать ключ -i, например tar -ixvf backup.tar
    $BACKUP --user=USER --password=PASSWORD --stream=tar ./ | pigz -p 5 > ${workdir}${dump}${ext}
    logger -t mysql_backup 'finish mysql full backup, start rsync'
# с помощью rsync копируем резервную копию на удаленный сервер
    rsync --bwlimit=5000 ${workdir}${dump}${ext} 192.168.0.4::backup
    logger -t mysql_backup 'finish rsync'
    rm -f ${workdir}/mysql*
fi

if [ $incr == '1' ];
then
    logger -t mysql_backup 'start mysql incremental backup'
# получаем значение LSN из последнего лога бекапа
    LSN=`cat /usr/local/sbin/innobackupex.log | grep "The latest check point (for incremental):" | awk -F"'" '{print $2}' | tail -n 1`
    echo $LSN > /usr/local/sbin/lsn
    dump="mysql"`date +%Y%m%d`"incr"
    archiv="mysql"`date +%Y%m%d`"incr.tar.gz"
    ext=".tar.gz"
    $BACKUP --user=USER --password=PASSWORD --incremental --incremental-lsn=$LSN --stream=xbstream ./ > ${workdir}${dump}.xbstream
    logger -t mysql_backup 'finish mysql incremental backup, start tar'
    cd ${workdir}
    `tar -czf $archiv $dump.xbstream`
    rm -f ${workdir}/*.xbstream
    logger -t mysql_backup 'finish tar, start rsync'
# с помощью rsync копируем резервную копию на удаленный сервер
    rsync --bwlimit=5000 ${workdir}${dump}${ext} 192.168.0.4::backup
    logger -t mysql_backup 'finish rsync'
    rm -f ${workdir}/mysql*
fi

Подробнее о развертывании полных или инкрементальных резервных копий читайте здесь.

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