Перейти к содержимому
Последнее обновление

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_PRIVUSER или ROLEЭту операцию могут выполнять только пользователи или роли с привилегией LOAD_PRIV

Примечания по использованию​

  • Поддерживается восстановление только таблиц типа OLAP.
  • В одной базе данных одновременно может выполняться только одна задача BACKUP или RESTORE.
  • Таблицы из резервной копии в хранилище можно восстановить, заменив существующие одноимённые таблицы в базе данных, но структуры обеих таблиц должны полностью совпадать. Структура таблицы включает имя таблицы, столбцы, разделы, Rollup и т. д.
  • Можно указать отдельные разделы восстанавливаемой таблицы. Система проверит, совпадают ли их Range или List.
  • Таблицу из резервной копии в хранилище можно восстановить под новым именем с помощью предложения AS. Новое имя таблицы не должно уже существовать в базе данных. Имя раздела изменить нельзя.
  • Эффективность операций восстановления: при одинаковом размере кластера восстановление занимает примерно столько же времени, сколько резервное копирование. Чтобы ускорить восстановление, можно сначала восстановить только одну реплику, задав параметр replication_num, а затем изменить количество реплик с помощью ALTER TABLE PROPERTY, чтобы создать остальные реплики.

Примеры​

  1. Восстановить таблицу 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"
);
  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"
);
  1. Восстановить все таблицы, кроме таблицы 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"
);