RESTORE
Описание
Этот оператор восстанавливает данные, сохранённые командой BACKUP, в указанную базу данных. Команда выполняется асинхронно. После успешной отправки необходимо отслеживать ход выполнения с помощью команды SHOW RESTORE.
Синтаксис
RESTORE SNAPSHOT [<db_name>.]<snapshot_name>
FROM `<repository_name>`
[ { ON | EXCLUDE } ] (
`<table_name>` [PARTITION (`<partition_name>`, ...)] [AS `<table_alias>`]
[, ...] ) ]
)
[ PROPERTIES ( "<key>" = "<value>" [ , ... ] )]
Обязательные параметры
1.<db_name>
Имя базы данных, которой принадлежат восстанавливаемые данные
2.<snapshot_name>
Имя снимка данных
3.<repository_name>
Имя хранилища. Создать хранилище можно с помощью CREATE REPOSITORY
4.[ PROPERTIES ( "<key>" = "<value>" [ , ... ] ) ]
Свойства операции восстановления в формате <key> = <value>. В настоящее время поддерживаются следующие свойства:
- "backup_timestamp" = "2018-05-04-16-45-08": Задаёт временную версию соответствующей резервной копии для восстановления. Обязательное свойство. Эту информацию можно получить с помощью оператора
SHOW SNAPSHOT ON repo;. - "replication_num" = "3": Задаёт количество реплик восстанавливаемой таблицы или раздела. Значение по умолчанию: 3. При восстановлении существующей таблицы или раздела количество реплик должно совпадать с количеством реплик этой таблицы или раздела. При этом должно быть достаточно узлов для размещения нескольких реплик.
- "reserve_replica" = "true": Значение по умолчанию: false. Если это свойство имеет значение true, свойство replication_num игнорируется, а у восстановленной таблицы или раздела будет столько же реплик, сколько было до резервного копирования. Поддерживается восстановление нескольких таблиц или нескольких разделов одной таблицы с разным количеством реплик.
- "reserve_colocate" = "true": Значение по умолчанию: false. Если это свойство имеет значение false, свойство colocate не восстанавливается. Если это свойство имеет значение true, восстановленная таблица сохраняет свойство colocate.
- "reserve_dynamic_partition_enable" = "true": Значение по умолчанию: false. Если это свойство имеет значение true, у восстановленной таблицы будет то же значение 'dynamic_partition_enable', что и до резервного копирования. Если значение этого свойства не равно true, для восстановленной таблицы устанавливается 'dynamic_partition_enable=false'.
- "timeout" = "3600": Тайм-аут задачи в секундах. По умолчанию одни сутки.
- "meta_version" = 40: Использует указанную meta_version для чтения метаданных из ранее созданной резервной копии. Этот параметр служит временным решением и используется только для восстановления данных из резервных копий, созданных старой версией Doris. Резервные копии, созданные последней версией, уже содержат версию метаданных, поэтому указывать её не требуется.
- "clean_tables" : Указывает, нужно ли удалять таблицы, которые не входят в набор восстанавливаемых объектов. Например, если перед восстановлением в целевой базе данных есть таблицы, отсутствующие в снимке, параметр
clean_tablesпозволяет удалить эти лишние таблицы и переместить их в корзину во время восстановления.- Эта возможность поддерживается начиная с версии Apache Doris 2.1.6
- "clean_partitions": Указывает, нужно ли удалять разделы, которые не входят в набор восстанавливаемых объектов. Например, если перед восстановлением в целевой таблице есть разделы, отсутствующие в снимке, параметр
clean_partitionsпозволяет удалить эти лишние разделы и переместить их в корзину во время восстановления.- Эта возможность поддерживается начиная с версии Apache Doris 2.1.6
- "atomic_restore" - : Сначала данные загружаются во временную таблицу, затем исходная таблица атомарно заменяется, чтобы операции чтения и записи в целевой таблице не затрагивались во время восстановления.
- "force_replace" : Принудительно заменяет существующую таблицу, если её схема отличается от схемы таблицы в резервной копии.
- Учтите, что для включения
force_replaceнеобходимо включитьatomic_restore
- Учтите, что для включения
Необязательные параметры
1.<table_name>
Имя восстанавливаемой таблицы. Если не указано, восстанавливается вся база данных.
- Таблицы и разделы, которые нужно восстановить, указываются в предложении ON. Если раздел не указан, по умолчанию восстанавливаются все разделы таблицы. Указанные таблица и раздел должны присутствовать в резервной копии в хранилище.
- Таблицы и разделы, которые не нужно восстанавливать, указываются в предложении EXCLUDE. Будут восстановлены все разделы всех остальных таблиц в хранилище, кроме указанной таблицы или раздела.
2.<partition_name>
Имя восстанавливаемого раздела. Если не указано, восстанавливаются все разделы соответствующей таблицы.
3.<table_alias>
Псевдоним таблицы
Требования к управлению доступом
Пользователь, выполняющий эту команду SQL, должен иметь как минимум следующие привилегии:
| Привилегия | Объект | Примечания |
|---|---|---|
| LOAD_PRIV | USER или ROLE | Эту операцию могут выполнять только пользователи или роли с привилегией LOAD_PRIV |
Примечания по использованию
- Поддерживается восстановление только таблиц типа OLAP.
- В одной базе данных одновременно может выполняться только одна задача BACKUP или RESTORE.
- Таблицы из резервной копии в хранилище можно восстановить, заменив существующие одноимённые таблицы в базе данных, но структуры обеих таблиц должны полностью совпадать. Структура таблицы включает имя таблицы, столбцы, разделы, Rollup и т. д.
- Можно указать отдельные разделы восстанавливаемой таблицы. Система проверит, совпадают ли их Range или List.
- Таблицу из резервной копии в хранилище можно восстановить под новым именем с помощью предложения AS. Новое имя таблицы не должно уже существовать в базе данных. Имя раздела изменить нельзя.
- Эффективность операций восстановления: при одинаковом размере кластера восстановление занимает примерно столько же времени, сколько резервное копирование. Чтобы ускорить восстановление, можно сначала восстановить только одну реплику, задав параметр
replication_num, а затем изменить количество реплик с помощью ALTER TABLE PROPERTY, чтобы создать остальные реплики.
Примеры
- Восстановить таблицу backup_tbl из снимка резервной копии snapshot_1 в хранилище example_repo в базу данных example_db1. Временная версия: "2018-05-04-16-45-08". Восстановить 1 реплику:
RESTORE SNAPSHOT example_db1.`snapshot_1`
FROM `example_repo`
ON ( `backup_tbl` )
PROPERTIES
(
"backup_timestamp"="2018-05-04-16-45-08",
"replication_num" = "1"
);
- Восстановить разделы p1, p2 таблицы backup_tbl из снимка резервной копии snapshot_2 в хранилище example_repo, а также таблицу backup_tbl2 в базу данных example_db1, переименовав её в new_tbl. Временная версия: "2018-05-04-17-11-01". По умолчанию восстанавливаются 3 реплики:
RESTORE SNAPSHOT example_db1.`snapshot_2`
FROM `example_repo`
ON
(
`backup_tbl` PARTITION (`p1`, `p2`),
`backup_tbl2` AS `new_tbl`
)
PROPERTIES
(
"backup_timestamp"="2018-05-04-17-11-01"
);
- Восстановить все таблицы, кроме таблицы backup_tbl, из снимка резервной копии snapshot_3 в хранилище example_repo в базу данных example_db1. Временная версия: "2018-05-04-18-12-18".
RESTORE SNAPSHOT example_db1.`snapshot_3`
FROM `example_repo`
EXCLUDE ( `backup_tbl` )
PROPERTIES
(
"backup_timestamp"="2018-05-04-18-12-18"
);