forum.bitel.ru
http://forum.bitel.ru/

Псевдо-инкрементальный бекап MySQL (mysqdump)
http://forum.bitel.ru/viewtopic.php?f=19&t=7894
Страница 1 из 1

Автор:  iros [ 28 мар 2013, 13:20 ]
Заголовок сообщения:  Псевдо-инкрементальный бекап MySQL (mysqdump)

Всем привет.
У меня стояла задача обеспечить бекап базы BGB4.6 средствами mysqdump. Т.е. в текстовые sql файлы.
Другие методы не подходили по ряду причин.
Полный бекап занимает пример 40 минут. И в это время системой практически нельзя пользоваться. Даже абонентские соединения начинают отваливаться. В общем не вариант. Известно, что BGB заводит новые таблицы на каждый месяц. Я решил, что будет правильно бекапить только новые таблицы и те, что изменились.
Своего рода инкрементальный бекап.
Получился скрипт, который выношу на обсуждение:

Цитата:
#!/bin/sh

DBHOST=$1
DBUSER=$2
DBPASS=$3
DBNAME=$4
BACKUPDIR=$5

CMD=`mysql -h $DBHOST -u $DBUSER -p$DBPASS $DBNAME --silent --batch --raw -e "SHOW TABLE STATUS;"`

SAVEIFS=$IFS
IFS='
'
for i in $CMD
do
TABNAME=`echo $i | awk -F '\t' '{print ($1)}'`
PRETABDATE=`echo $i | awk -F '\t' '{print ($13)}'`
TABENGINE=`echo $i | awk -F '\t' '{print ($2)}'`
if [ $TABENGINE != "MyISAM" -a $TABENGINE != "InnoDB" ]
then
continue
fi
if [ "$PRETABDATE" = "NULL" ]
then
PRETABDATE=`echo $i | awk -F '\t' '{print ($12)}'`
fi
TABDATE=`date -d "$PRETABDATE" +%s`
if ( [ -f $BACKUPDIR/$TABNAME ] )
then
DATE1=`ls --full-time $BACKUPDIR/$TABNAME | awk '{print $6;}'`
DATE2=`ls --full-time $BACKUPDIR/$TABNAME | awk '{print $7;}' | sed "s/\\..*//"`
DATE3=$DATE1" "$DATE2
FDATE=`date -d "$DATE3" +%s`
if ( [ $TABDATE -le $FDATE ] )
then
echo $TABNAME ... Skip
continue
fi
fi
echo $TABNAME ... Backup
/usr/bin/mysqldump --opt -h $DBHOST -u $DBUSER -p$DBPASS $DBNAME $TABNAME > $BACKUPDIR/$TABNAME
done

IFS=$SAVEIFS

echo "All done."
exit 0


Скрипт сравнивает дату модификации (или создания) таблицы и дату файла-бекапа. Если его нет или дата старая - делается бекап.
Теперь бекап-обновление у меня происходит за 1.5 минуты. Можно делать несколько раз в день.

Автор:  stark [ 28 мар 2013, 13:40 ]
Заголовок сообщения:  Re: Псевдо-инкрементальный бекап MySQL (mysqdump)

Можно еще бекапить через slave как вариант

Автор:  iros [ 28 мар 2013, 14:01 ]
Заголовок сообщения:  Re: Псевдо-инкрементальный бекап MySQL (mysqdump)

Можно. Но это будет не бекап, а реплика. Не поможет в случае массой порчи данных или удаления строк, т.к. изменения тут же произойдут и на реплике.
Были случай когда из-за неверно составленного запроса терялись исходные данные. Выручал бекап.

Автор:  Cromeshnic [ 28 мар 2013, 14:09 ]
Заголовок сообщения:  Re: Псевдо-инкрементальный бекап MySQL (mysqdump)

У нас каждый день делается полный бэкап со слейва по ночам: отключается репликация, делается бэкап, репликация включается, данные догоняются.

Автор:  skn [ 28 мар 2013, 17:58 ]
Заголовок сообщения:  Re: Псевдо-инкрементальный бекап MySQL (mysqdump)

Cromeshnic писал(а):
У нас каждый день делается полный бэкап со слейва по ночам: отключается репликация, делается бэкап, репликация включается, данные догоняются.


по хорошому для этого снапшоты надо бы делать и с него бакапить

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/