Биллинговая система Nodeny
17 Мая 2024, 23:47:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: Инкриментальный бэкап баз данных MySQL с помощью Percona innobackupex  (Прочитано 8271 раз)
Andrey Zentavr
NoDeny
Старожил
*

Карма: 29
Offline Offline

Сообщений: 301



Просмотр профиля
« : 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
(Да, я собираю информацию о трафике и у меня много абонентов).

Есть у кого-нибудь опыт работы с этим делом?
Записан
versus
Администратор
Спец
*****

Карма: 21
Offline Offline

Сообщений: 845


44306843
Просмотр профиля WWW Email
« Ответ #1 : 11 Марта 2012, 14:53:05 »

что мешает скидывать устаревшие таблицы с трафиком в отдельный бэкап/базу данных(например помесячно)  и удалять их из основной базы ?

Записан
Andrey Zentavr
NoDeny
Старожил
*

Карма: 29
Offline Offline

Сообщений: 301



Просмотр профиля
« Ответ #2 : 11 Марта 2012, 15:23:01 »

что мешает скидывать устаревшие таблицы с трафиком в отдельный бэкап/базу данных(например помесячно)  и удалять их из основной базы ?
Мне ничего не мешает Улыбающийся Но есть как всегда некоторые "но" из-за которых мы так не делаем. Просто когда вдруг Директор/девочка-саппорт/оператор начнёт ковырять кто ходил на далеко-далеко.уа, они будут звонить Андрею с просьбой вернуть эти таблицы на место. Это не трёхсекундная операция к сожалению.
А сам я работаю над более высокооплачиваемыми проектами чем администрирование городской сети Улыбающийся
Записан
Cell
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1407



Просмотр профиля
« Ответ #3 : 11 Марта 2012, 15:55:30 »

Хм.... а почему бы не заюзать rsync и не бекапить базу прямо файлами? Дамп основных таблиц кстати при этом никто не отменял. Идея какова: Таблицы с трафиком создаются на каждый день, т.е. старые таблицы с течением времени не обновляются, значит их по 100 раз передавать не будет, а будет сохранять только новые или изменившиеся файлы. На то что таблицы при этом не лочатся можно забить на том основании что завтра эти таблицы юзаться всеравно уже не будут и  бэкап произойдет ПРАВИЛЬНО.
Записан
Andrey Zentavr
NoDeny
Старожил
*

Карма: 29
Offline Offline

Сообщений: 301



Просмотр профиля
« Ответ #4 : 12 Марта 2012, 15:42:57 »

Хм.... а почему бы не заюзать rsync и не бекапить базу прямо файлами? Дамп основных таблиц кстати при этом никто не отменял. Идея какова: Таблицы с трафиком создаются на каждый день, т.е. старые таблицы с течением времени не обновляются, значит их по 100 раз передавать не будет, а будет сохранять только новые или изменившиеся файлы. На то что таблицы при этом не лочатся можно забить на том основании что завтра эти таблицы юзаться всеравно уже не будут и  бэкап произойдет ПРАВИЛЬНО.

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

Карма: 52
Offline Offline

Сообщений: 1407



Просмотр профиля
« Ответ #5 : 12 Марта 2012, 15:49:30 »

Ну если внимательно прочитать то что я написал, то там видно что дамп критически важных таблиц никто не мешает делать хоть каждые 15 минут. Это уже вопрос веры. Речь  шла о "тяжелом". Так вот от сегодня до завтра.... и хрен с ним. Даже если таблица будет крашнутая, то она легко ресторится (там пару последних записей удаляется и все )))
Записан
Andrey Zentavr
NoDeny
Старожил
*

Карма: 29
Offline Offline

Сообщений: 301



Просмотр профиля
« Ответ #6 : 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

Восстановленный бекап можно просто подложить под другой сервер тупо файлами.
Записан
Rico-X
NoDeny
Старожил
*

Карма: 7
Offline Offline

Сообщений: 350


Просмотр профиля
« Ответ #7 : 04 Августа 2012, 08:58:32 »

Бэкапы из более 10 инкрементов восстанавливать пробовали? После одного случая инкрементальными бэкапами пользоваться перестал Грустный
Записан
Lexx
Постоялец
***

Карма: 10
Offline Offline

Сообщений: 143

204026123
Просмотр профиля WWW
« Ответ #8 : 04 Августа 2012, 13:25:27 »

mysqlhotcopy, rsnapshot
а еще лучше
flush (что делает и mysqlhotcopy), lvm snapshot и потом уже rsnapshot
надежно, бинарно, инкрементально, прозрачно
Записан
Andrey Zentavr
NoDeny
Старожил
*

Карма: 29
Offline Offline

Сообщений: 301



Просмотр профиля
« Ответ #9 : 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
Записан
Andrey Zentavr
NoDeny
Старожил
*

Карма: 29
Offline Offline

Сообщений: 301



Просмотр профиля
« Ответ #10 : 08 Августа 2012, 00:15:51 »

P.S.: time перед скриптом считает время выполнения.
На 8ядерном серваке бекап 52Гб БД делался за 28 минут, инкременты - по 8 минут.
Собиралось обратно 1 полный бекап + 4 инкремента за 32 минуты.
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!