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/ |