Биллинговая система Nodeny

Главная категория => Курилка => Тема начата: Andrey Zentavr от 11 Марта 2012, 04:15:59



Название: Инкриментальный бэкап баз данных MySQL с помощью Percona innobackupex
Отправлено: Andrey Zentavr от 11 Марта 2012, 04:15:59
Изучаю тему http://www.percona.com/doc/percona-xtrabackup/innobackupex/incremental_backups_innobackupex.html (Порты: /usr/ports/databases/xtrabackup)
...Для использования фичи нужно, чтоб тип таблиц был InnoDB (авторы биллинга используют MyISAM, и где-то даже рассказывали почему).

Размер базы у меня уже не много ни мало:
230G    ./mysql
(Да, я собираю информацию о трафике и у меня много абонентов).

Есть у кого-нибудь опыт работы с этим делом?


Название: Re: Инкриментальный бэкап баз данных MySQL с помощью Percona innobackupex
Отправлено: versus от 11 Марта 2012, 14:53:05
что мешает скидывать устаревшие таблицы с трафиком в отдельный бэкап/базу данных(например помесячно)  и удалять их из основной базы ?



Название: Re: Инкриментальный бэкап баз данных MySQL с помощью Percona innobackupex
Отправлено: Andrey Zentavr от 11 Марта 2012, 15:23:01
что мешает скидывать устаревшие таблицы с трафиком в отдельный бэкап/базу данных(например помесячно)  и удалять их из основной базы ?
Мне ничего не мешает :) Но есть как всегда некоторые "но" из-за которых мы так не делаем. Просто когда вдруг Директор/девочка-саппорт/оператор начнёт ковырять кто ходил на далеко-далеко.уа, они будут звонить Андрею с просьбой вернуть эти таблицы на место. Это не трёхсекундная операция к сожалению.
А сам я работаю над более высокооплачиваемыми проектами чем администрирование городской сети :)


Название: Re: Инкриментальный бэкап баз данных MySQL с помощью Percona innobackupex
Отправлено: Cell от 11 Марта 2012, 15:55:30
Хм.... а почему бы не заюзать rsync и не бекапить базу прямо файлами? Дамп основных таблиц кстати при этом никто не отменял. Идея какова: Таблицы с трафиком создаются на каждый день, т.е. старые таблицы с течением времени не обновляются, значит их по 100 раз передавать не будет, а будет сохранять только новые или изменившиеся файлы. На то что таблицы при этом не лочатся можно забить на том основании что завтра эти таблицы юзаться всеравно уже не будут и  бэкап произойдет ПРАВИЛЬНО.


Название: Re: Инкриментальный бэкап баз данных MySQL с помощью Percona innobackupex
Отправлено: Andrey Zentavr от 12 Марта 2012, 15:42:57
Хм.... а почему бы не заюзать rsync и не бекапить базу прямо файлами? Дамп основных таблиц кстати при этом никто не отменял. Идея какова: Таблицы с трафиком создаются на каждый день, т.е. старые таблицы с течением времени не обновляются, значит их по 100 раз передавать не будет, а будет сохранять только новые или изменившиеся файлы. На то что таблицы при этом не лочатся можно забить на том основании что завтра эти таблицы юзаться всеравно уже не будут и  бэкап произойдет ПРАВИЛЬНО.

Ух, я думаю что от "сегодня" до "завтра" куча абонов может пополнить себе счета, либо же на оборот просадить деньги  и т.д., посему не совсем хорошо что сегодня бекап битый, а завтра возможно не битый. Ну, в общем, это просто моё ИМХО такое вот.


Название: Re: Инкриментальный бэкап баз данных MySQL с помощью Percona innobackupex
Отправлено: Cell от 12 Марта 2012, 15:49:30
Ну если внимательно прочитать то что я написал, то там видно что дамп критически важных таблиц никто не мешает делать хоть каждые 15 минут. Это уже вопрос веры. Речь  шла о "тяжелом". Так вот от сегодня до завтра.... и хрен с ним. Даже если таблица будет крашнутая, то она легко ресторится (там пару последних записей удаляется и все )))


Название: Re: Инкриментальный бэкап баз данных MySQL с помощью Percona innobackupex
Отправлено: Andrey Zentavr от 03 Августа 2012, 19:20:32
В кратце:
Код:
# 1) Full:  
innobackupex --include=monitoring.* --parallel=8 --extra-lsndir=/root/backup/lsn \
             --stream=xbstream --no-timestamp /root/backup/full 2>/root/backup/logs/full.log | lzop -c > /root/backup/streams/full-monitoring.xbstream.lzo
# 2) 1st incremental:
innobackupex --include=monitoring.* --parallel=8 --incremental --extra-lsndir=/root/backup/lsn \
             --incremental-lsn=$(grep "to_lsn" /root/backup/lsn/xtrabackup_checkpoints | awk -F'=' '{print $2}' | sed 's/^[ \t]*//;s/[ \t]*$//') \
             --stream=xbstream /root/backup/inc 2>/root/backup/logs/1st.log | lzop -c > /root/backup/streams/inc-1st-monitoring.xbstream.lzo
# 3) 2nd incremental:
innobackupex --include=monitoring.* --parallel=8 --incremental --extra-lsndir=/root/backup/lsn \
             --incremental-lsn=$(grep "to_lsn" /root/backup/lsn/xtrabackup_checkpoints | awk -F'=' '{print $2}' | sed 's/^[ \t]*//;s/[ \t]*$//') \
             --stream=xbstream /root/backup/inc 2>/root/backup/logs/2nd.log | lzop -c > /root/backup/streams/inc-2nd-monitoring.xbstream.lzo
# 4) 3rd incremental:
innobackupex --include=monitoring.* --parallel=8 --incremental --extra-lsndir=/root/backup/lsn \
             --incremental-lsn=$(grep "to_lsn" /root/backup/lsn/xtrabackup_checkpoints | awk -F'=' '{print $2}' | sed 's/^[ \t]*//;s/[ \t]*$//') \
             --stream=xbstream /root/backup/inc 2>/root/backup/logs/3rd.log | lzop -c > /root/backup/streams/inc-3rd-monitoring.xbstream.lzo
# 5) etc... etc...

Далее восстанавливаем:
Код:
#### Restore from the backup (stream) ####
# 1) Unpack full backup
mkdir -p /root/backup/data/full
lzop -dcfU /root/backup/streams/full-monitoring.xbstream.lzo | xbstream -x --directory=/root/backup/data/full
# 2) Unpack incremental backups
mkdir -p /root/backup/data/1st
lzop -dcfU /root/backup/streams/inc-1st-monitoring.xbstream.lzo | xbstream -x --directory=/root/backup/data/1st
mkdir -p /root/backup/data/2nd
lzop -dcfU /root/backup/streams/inc-2nd-monitoring.xbstream.lzo | xbstream -x --directory=/root/backup/data/2nd
mkdir -p /root/backup/data/3rd
lzop -dcfU /root/backup/streams/inc-3rd-monitoring.xbstream.lzo | xbstream -x --directory=/root/backup/data/3rd
# 3) Replay the commited transactions on full (base) backup:
innobackupex --apply-log --redo-only /root/backup/data/full --use-memory=1G
# 4) Apply incrementals backups (1st, 2nd and 3rd in our case) to the base backup
innobackupex --apply-log --redo-only /root/backup/data/full --incremental-dir=/root/backup/data/1st --use-memory=1G
innobackupex --apply-log --redo-only /root/backup/data/full --incremental-dir=/root/backup/data/2nd --use-memory=1G
innobackupex --apply-log --redo-only /root/backup/data/full --incremental-dir=/root/backup/data/3rd --use-memory=1G
# 5) Preparing again the full backup (base + incrementals) once again to rollback the pending transactions:
innobackupex-1.5.1 --apply-log /root/backup/data/full --use-memory=1G
# 6) Have fun :)
# Now your backup is ready to be used immediately after restoring it. This preparation step is optional, as if you restore it without doing it,
# the database server will assume that a crash occurred and will begin to rollback the uncommitted transaction
# (causing some downtime which can be avoided).

Коменты на английском, потому что скрипт готовится для одной испанской компании, которая имеет базы по несколько сот гигабайт.
Для получения всех вкусностей инкрементального бэкапа необходимо чтобы все таблицы были типа InnoDB и была установлена опция innodb_file_per_table=1. Физически таблица будет представлять два файла - определение таблицы и данные таблицы:
Код:
acknowledges.frm
acknowledges.ibd
actions.frm
actions.ibd
alerts.frm
alerts.ibd
applications.frm
applications.ibd

Восстановленный бекап можно просто подложить под другой сервер тупо файлами.


Название: Re: Инкриментальный бэкап баз данных MySQL с помощью Percona innobackupex
Отправлено: Rico-X от 04 Августа 2012, 08:58:32
Бэкапы из более 10 инкрементов восстанавливать пробовали? После одного случая инкрементальными бэкапами пользоваться перестал :(


Название: Re: Инкриментальный бэкап баз данных MySQL с помощью Percona innobackupex
Отправлено: Lexx от 04 Августа 2012, 13:25:27
mysqlhotcopy, rsnapshot
а еще лучше
flush (что делает и mysqlhotcopy), lvm snapshot и потом уже rsnapshot
надежно, бинарно, инкрементально, прозрачно


Название: Re: Инкриментальный бэкап баз данных MySQL с помощью Percona innobackupex
Отправлено: Andrey Zentavr от 08 Августа 2012, 00:14:29
Скрипт готов, тестировался на Ubuntu Server 10.04.4 LTS.
Возможно для FreeBSD прийдёться немного поработать напильником, что будет чуток позже. Ну а пока как есть:
Код:
# Full backup:
time ./myXtraBackup.sh --job=backup --type=full --database=monitoring --lsndir=/root/backup/lsn/ --log=/root/backup/logs/full.log --path=/root/backup/streams/
# Incremental backup:
time ./myXtraBackup.sh --job=backup --type=incremental --database=monitoring --lsndir=/root/backup/lsn/ --log=/root/backup/logs/1st.log --path=/root/backup/streams/
time ./myXtraBackup.sh --job=backup --type=incremental --database=monitoring --lsndir=/root/backup/lsn/ --log=/root/backup/logs/2nd.log --path=/root/backup/streams/
time ./myXtraBackup.sh --job=backup --type=incremental --database=monitoring --lsndir=/root/backup/lsn/ --log=/root/backup/logs/3rd.log --path=/root/backup/streams/
time ./myXtraBackup.sh --job=backup --type=incremental --database=monitoring --lsndir=/root/backup/lsn/ --log=/root/backup/logs/4th.log --path=/root/backup/streams/
# Restore:
time ./myXtraBackup.sh --job=restore --database="monitoring" --path=/root/backup/streams/ --dest=/root/backup/data/ --log=/root/backup/logs/restore.log


Название: Re: Инкриментальный бэкап баз данных MySQL с помощью Percona innobackupex
Отправлено: Andrey Zentavr от 08 Августа 2012, 00:15:51
P.S.: time перед скриптом считает время выполнения.
На 8ядерном серваке бекап 52Гб БД делался за 28 минут, инкременты - по 8 минут.
Собиралось обратно 1 полный бекап + 4 инкремента за 32 минуты.