Скрипт для создания бекапов БД с помощью 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





#Percona #XtraBackup



👉 @database_info