Блог Андрея Боровкова

О СЕБЕ И О ТОМ ЧТО ИНТЕРЕСНО

Backup MySql на высоконагруженном сервере

by Андрей Боровоков on 30.08.2013, no comments

mysql-logoОбычно резервную копию баз снимают через через команду mysqldump. Но что делать если сервер высоконагруженный, размер базы больше 10Гб, и база должна работать 24х7х365? Myqldump лочит таблицы при снятии дампа, из-за этого работа сервиса, связанного с этой базой нарушается, и время снятия дампа не минуты, а часы. Кроме того возникает еще один вопрос, в случае выхода из строя сервера, как быстро поднять до рабочего состояния базу за считанные минуты? Решение есть — Percona XtraBackup:

 

 

logo_percona_xtrabackup_new1) Percona XtraBackup: — Скачиваем и устанавливаем свежую версию.
2) Пишем скрипт mysqlbackup.sh:


#—————————————————————————
#!/bin/sh
export PATH=/sbin:/usr/sbin:/bin:/usr/bin
CATALOGDATE=`date +»%Y-%m»`
FILEDATE=`date +»%Y-%m-%d»`
ROOTPATH=/backup/bd
TARGET_USER=user
TARGET_ID_FILE=/root/.ssh/backup.1.id_rsa
TARGET_ID_FILE2=/root/.ssh/backup.2.id_rsa
TARGET_HOST=your.hostname.ru
TARGET_HOST2=your2.hostname.ru
TPORT=22
TARGET_DIR=/backup/bd
MYSQL_USER=root
MYSQL_PASS=password
MAIL_USER=yourmail@mail.ru
LOG_FILE=/var/log/backup/bckpv2.log

if [ ! -d $ROOTPATH/store/$CATALOGDATE ]; then
mkdir -p $ROOTPATH/store/$CATALOGDATE
fi

if [ ! -d $ROOTPATH/tmp ]; then
mkdir -p $ROOTPATH/tmp
fi

innobackupex $ROOTPATH/tmp —user=$MYSQL_USER —password=$MYSQL_PASS 2>&1 | logger -t bckpv2

MYSQL_TMP_DIR=`ls $ROOTPATH/tmp`
##innobackupex $ROOTPATH/tmp/$MYSQL_TMP_DIR —apply-log —use-memory=1G 2>&1 | logger -t bckpv2

tar -czpf $ROOTPATH/store/$CATALOGDATE/$FILEDATE.tar.gz $ROOTPATH/tmp/* 2>&1| logger -t bckpv2
echo «tar $FILEDATE.tar.gz complited» | logger -t bckpv2

rm -r $ROOTPATH/tmp/* 2>&1 | logger -t bckpv2

echo «Starting SCP» | logger -t bckpv2
scp -P $TPORT -i $TARGET_ID_FILE $ROOTPATH/store/$CATALOGDATE/$FILEDATE.tar.gz $TARGET_USER@$TARGET_HOST:$TARGET_DIR/mysql 2>&1 | logger -t bckpv2
echo «Ending SCP» | logger -t bckpv2

echo «Starting SCP» | logger -t bckpv2
scp -P $TPORT -i $TARGET_ID_FILE2 $ROOTPATH/store/$CATALOGDATE/$FILEDATE.tar.gz $TARGET_USER@$TARGET_HOST2:$TARGET_DIR/mysql 2>&1 | logger -t bckpv2
echo «Ending SCP» | logger -t bckpv2

MAIL_SUBJ=»$HOSTNAME: INFO: $FILEDATE backup report»
#echo $MAIL_SUBJ
#echo $MAIL_USER
#echo $LOG_FILE
mailx -s «$MAIL_SUBJ» $MAIL_USER < $LOG_FILE
echo «Mail sent to $MAIL_USER» | logger -t bckpv2

logrotate /etc/scripts/logrotate.d/bckpv2
#————————————————————————————
3) Добавляем по расписанию в cron
4) Если необходимо поднять на резервном сервере, разворачиваем архив в директорию mysql (по умолчанию /var/lib/mysql), стартуем mysql — и радуемся жизни.
5) Про синхронизацию статической части расскажу в следующей статье.

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