2016-10-18 5 views
0

У меня есть несколько файлов двоичного файла MYSQL, а также файл двоичного индекса (https://dev.mysql.com/doc/refman/5.6/en/point-in-time-recovery.html).Восстановить базу данных из многих файлов журнала ловушек mysql

Файлы выглядят так: log-bin.000001, log-bin.000002, log-bin.000003.

У меня также есть log-bin.index файл, который выглядит так:

/path/to/mysql-bin-dump-logs/log-bin.000001 
/path/to/mysql-bin-dump-logs/log-bin.000002 
/path/to/mysql-bin-dump-logs/log-bin.000003 

Согласно документации, способ восстановить свою базу данных, используя эти файлы журналов, как так:

mysqlbinlog log-bin.000001 log-bin.000002 log-bin.000003 | mysql -u root -p 

Это не так уж плохо при восстановлении небольшого количества файлов, но главное неудобство при восстановлении из многих файлов (например, 1000 файлов журнала).

Как восстановить мою базу данных без явного указания каждого файла?

ответ

1

Периодически создавайте резервные копии.

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

Инструменты резервного копирования имеют возможность записывать файл двоичного журнала и позицию, которая была текущей в момент запуска резервного копирования. Например:

mysqldump --master-data=1 ... 

Используя только бинарные журналов для восстановления вашей базы данных является неэффективной, особенно если ваша история изменений базы данных включает в себя несколько обновлений и удаления, изменять таблицы, удаление таблицы и т.д. Поскольку двоичный журнал повторы всех изменения, даже те, которые позже меняются или удаляются.

Если вы используете резервные копии базы данных, он записывает только текущее состояние данных, пропуская все сотни дней изменений, которые были сделаны до резервного копирования.

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


Чтобы ответить на ваш вопрос буквально, как запустить mysqlbinlog против 1000 файлов удобно, вы можете использовать find и xargs:

find . -name 'log-bin.[0-9]*' | sort | xargs mysqlbinlog | mysql -u root -p 
+0

Это инкрементные. Поэтому я не думаю, что это актуально в этом случае. –

+0

Некоторые средства резервного копирования также поддерживают инкрементное резервное копирование. Пример: https://www.percona.com/doc/percona-xtrabackup/2.2/xtrabackup_bin/incremental_backups.html –