2015-09-17 18 views
1

Я объясняю свой сценарий. У меня мало сайтов (скажем, Wordpress, например, мой вопрос вообще) с автообновлением, некоторыми плагинами с автоматическим обновлением, администратором (стандартным пользователем ПК), который пишет сообщения, создает страницы, ... Каждый день я делаю полное резервное копирование файлов и базы данных на каждом сайте и хранение их на устройстве хранения в течение 6 месяцев.Резервное копирование и восстановление части базы данных

Предположим, что в первый день все работает. На второй день мой сайт успешно обновил сайт. На 3-й день администратор вставляет много материала, такого как много страниц и много сообщений. На 4-й день администратор замечает, что плагин перестает работать (возможно, из-за обновления). На 5-й день администратор советует, кто поддерживает сайт (я) о проблеме с плагином.

Проблема: восстановление БД с резервной копии 1-й день, но вставить материал из резервной копии дня 3. На Wordpress, вероятно, я могу решить эту проблему вручную, восстановив день 1 дБ, а замените таблицу wp_post на один день 3 дБ.

До сих пор мой вопрос более общий: как можно сохранить в файле SQL (или другой формат) каждый день (или каждый час) только модифицированном, добавлены или удалены строки базы данных? Так объясненный сценарий, я должен иметь резервные файлы, как эти:

day1diffs.sql 
day2diffs.sql 
... 

Как я могу получить этот результат? Или лучше, может быть полезно следовать этой линии?

ответ

1

Это сложный вопрос. Когда мы говорим только по InnoDB таблиц у вас есть 2 причины:

первый:

Использование XtraBackup, вы можете сделать добавочные резервные копии на каждый раз, то есть. 1 месяца вы можете сделать резервную копию 0 (полный), каждый уровень воскресенья 1. Это только разница между уровнем 0, а в другие дни - резервной копией уровня 2 и каждым часом резервного копирования уровня 3. поэтому у вас есть очень маленькие кусочки и можете вернуться к каждому моменту времени. Эта резервная копия не останавливает или блокирует сервер (только очень короткий момент) делает двоичную копию из каждого Tablediff и после этого сохраняет кусок двоичных журналов.

второй:

Сделать туздЫшпр один раз в неделю или, что вы хотите и держать бинарный журнал больше, чем на неделю. вы можете скопировать его с помощью rsync для его архивирования. Таким образом, вы также можете перейти к каждому моменту времени, но вы должны восстановить резервную копию, и после этого вы должны вставить binlogs из резервной точки в нужную точку. Если ваш mysqldump 5 дней, поэтому вы должны импортировать все !!! binlogs начинаются с дампа даты до нужной даты. Это может занять много времени.

+0

Решение 1 может быть похоже на то, что я ищу. Можете ли вы пойти глубже в этом? Может ли решение 1 быть выполнено только с помощью внешнего программного обеспечения или я могу написать какой-то триггер? Моя цель состоит в том, чтобы вернуться к каждой точке времени, возможно с или без некоторых частей (то есть проблемы). –

+1

xtrabackup - это «только» инструмент для резервного копирования и восстановления, и вы можете использовать его непосредственно из командной строки. Поэтому я пишу небольшой shell-скрипт, чтобы каждую неделю делать резервную копию 0, ежедневно утром делать резервную копию 1 и каждый час резервной копией 2 и сохранять результаты в дереве каталогов –

+1

(каждую неделю в директории, этот каталог и в том, что каждый час дир для резервного копирования часа), так что прямо сейчас я должен восстановить. Инструмент бесплатный, и я нашел для него хороший учебник: https://www.percona.com/doc/percona-xtrabackup/2.2/how-tos.html Вы можете прочитать его лучше. мой английский не так хорошо сказать все ясно. Если у вас есть еще вопросы, вы можете написать или позвонить мне - извините, что на один комментарий --- –

1

Выполняйте ежедневные резервные копии и включите ведение журнала двоичных файлов MySQL, чтобы сохранить полный пошаговый список изменений. С помощью этого вы можете восстановить любой момент времени, когда у вас есть резервная копия и журналы.

log-bin=mysql-bin.log 
relay-log=mysqld-relay-bin 
server-id=1 
binlog-format=MIXED 
expire_logs_days=29 

Вы можете использовать бинарные журналы, чтобы воспроизвести все запросы с момента создания последней резервной копии был взят и есть инструменты для извлечения данных из журналов в различных формах.

Выполните запрос «FLUSH LOGS» в базу данных при создании резервной копии для создания нового файла журнала из точки резервного копирования.

Получение более совершенных, есть также tools, чтобы скопировать журналы в режиме реального времени на удаленный хост для дополнительного спокойствия.

Смежные вопросы