БЛОКИРОВКА РЕЗЕРВНОГО КОПИРОВАНИЯ
Команда BACKUP LOCK была введена в MariaDB 10.4.2.
Команда BACKUP LOCK блокирует таблицу от DDL-запросов. Она в основном предназначена для использования такими инструментами, как mariabackup, которые должны гарантировать отсутствие DDL-операций над таблицей во время открытия файлов таблицы. Например, для таблицы Aria, которая хранит данные в 3 файлах с расширениями .frm, .MAI и .MAD. Обычные операции чтения/записи могут выполняться как обычно.
Синтаксис
Для блокировки таблицы:
BACKUP LOCK table_name
Для разблокировки таблицы:
BACKUP UNLOCK
Использование в инструменте резервного копирования
BACKUP LOCK [database.]table_name; - Open all files related to a table (for example, t.frm, t.MAI and t.MYD) BACKUP UNLOCK; - Copy data - Close files
Это гарантирует, что все файлы принадлежат одному поколению, то есть созданы в одно и то же время сервером MariaDB. Это работает, потому что открытые файлы будут указывать на исходные файлы таблицы, которые не будут затронуты, если во время копирования файлов будет выполнено ALTER TABLE.
Права доступа
Для BACKUP LOCK требуется право RELOAD.
Примечания
- Идея в том, что
BACKUP LOCKдолжна удерживаться резервным инструментом как можно меньше времени. Время для получения бесспорной блокировки очень короткое! Легко можно выполнить 50 000 блокировок/разблокировок в секунду на оборудовании низкого класса. - Следует использовать разные соединения для команд BACKUP STAGE и
BACKUP LOCK.
Реализация
- Внутренне, BACKUP LOCK реализуется путем взятия
MDLSHARED_HIGH_PRIOMDL-блокировки на объекте таблицы, что защищает таблицу от любых DDL-операций.
См. также
- BACKUP STAGE
- MDEV-17309 - БЛОКИРОВКА РЕЗЕРВНОГО КОПИРОВАНИЯ: блокировка DDL таблиц во время резервного копирования
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/backup-lock/