8.2 Архивирование и восстановление реплики базы данных
Для архивирования реплики базы данных добавьте опцию --replica-info в вашу команду архивирования.
Чтобы восстановить архив на сервере реплики, следуйте тем же шагам, что описаны в разделе 8.1 «Настройка новой реплики».
Временные таблицы на реплике. MySQL Enterprise Backup не включает временные таблицы в архив. В результате, для сервера реплики в режиме операционного или смешанного режима репликации (см. для получения подробностей), любые временные таблицы, остающиеся открытыми в конце процесса архивирования, будут отсутствовать на восстановленном сервере реплики, что сделает состояние реплики несогласованным, и любые последующие реплицированные операторы, ссылающиеся на временные таблицы, завершатся ошибкой. Чтобы избежать этой проблемы, после фазы горячего резервного копирования реплики, в которой mysqlbackup копирует все таблицы InnoDB, он входит в цикл, в котором происходит следующее:
mysqlbackup ожидает, пока все временные таблицы не будут закрыты потоком SQL репликации. mysqlbackup определяет это, проверяя, является ли переменная равной 0.
После того, как mysqlbackup определяет, что переменная равна 0, он останавливает поток репликации SQL, чтобы предотвратить дальнейшие изменения таблиц на реплике.
-
Для предотвращения непредвиденных последствий из-за гонки, после остановки потока SQL репликации, mysqlbackup проверяет еще раз, равна ли переменная 0
Если это так, mysqlbackup выходит из цикла и завершает архивирование, устанавливая блокировку чтения на все таблицы, не являющиеся InnoDB, и копируя их.
Если это не так, на реплике были созданы и открыты новые временные таблицы. mysqlbackup затем перезапускает поток SQL репликации, чтобы можно было сделать больше обновлений на серверах реплики. mysqlbackup затем возвращается к шагу 1 этого цикла
Помимо условия выхода, описанного в шаге (3) выше (которое заключается в том, что действительно больше нет открытых временных таблиц, и mysqlbackup готов завершить архивирование), mysqlbackup будет ожидать заданное время, находясь в цикле, описанном выше, чтобы дождаться закрытия всех временных таблиц. Время ожидания mysqlbackup до выхода из ожидания задается опцией --safe-replica-backup-timeout.
Кроме того, mysqlbackup также выполняет начальную проверку в начале архивации реплики, чтобы убедиться, что mysqlbackup становится равным 0 в течение времени, заданного опцией --safe-replica-backup-timeout. Подробнее об этой проверке см. описание опции --safe-replica-backup-timeout.
Хотя проблема с временными таблицами, описанная выше, не возникает в случае репликации на основе строк (RBR) (для которой временные таблицы не реплицируются на реплику), любые резервные копии реплик все равно входят в тот же цикл, что описан выше, поскольку режим репликации может быть в любой момент изменен с RBR на репликацию на основе операторов (SBR) или смешанный режим репликации. Пользователи, уверенные в том, что репликация на основе операторов не используется для реплики, могут установить опцию --safe-replica-backup-timeout=0, которая предотвратит mysqlbackup от входа в указанный выше цикл.
См. ограничения, которые применяются при архивировании реплики в приложении B «Ограничения MySQL Enterprise Backup».
© 2025 Oracle
Licensed under the GPLv2 License.