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

Восстановление

В этом руководстве описано, как с помощью оператора Doris RESTORE восстановить базу данных, таблицу или раздел из резервного снимка в существующем Repository и отслеживать ход задания восстановления. Руководство охватывает такие сценарии, как откат данных, миграция в новый кластер, репликация между базами данных и исправление данных на уровне таблиц или разделов.

Сценарии использования​

СценарийРекомендуемый подходОписание
Восстановление всего снимка в текущую базу данныхВосстановление снимка в текущую базу данныхНаиболее распространённый случай. Все объекты снимка восстанавливаются в базу данных, выбранную командой USE.
Восстановление всего снимка в другую базу данныхВосстановление снимка в указанную базу данныхИспользуется для миграции между базами данных или для хранения копии данных в другой базе данных.
Восстановление из снимка только определённой таблицыВосстановление отдельной таблицы из снимкаИспользуется, когда нужно откатить или перенести только одну определённую таблицу.
Восстановление указанных разделов или переименование таблицы при восстановленииВосстановление разделов и таблиц из снимкаПоддерживает восстановление только части разделов и переименование таблиц при восстановлении с помощью AS, чтобы избежать перезаписи существующих объектов.

Предварительные требования​

  • У вас есть права администратора для выполнения восстановления.
  • Имеется пригодный для использования резервный снимок. Операции резервного копирования описаны в разделе Резервное копирование.
  • Вы знаете имя Repository, в котором хранится резервная копия (в примерах используется example_repo).

Обзор процесса восстановления​

  1. Выполните запрос списка доступных снимков в целевом Repository, чтобы получить имя снимка и временную метку резервной копии.
  2. В зависимости от задачи выберите оператор RESTORE для восстановления всей базы данных, восстановления в другую базу данных, восстановления отдельной таблицы или отдельных разделов.
  3. Используйте SHOW RESTORE, чтобы проверить состояние и ход задания восстановления и убедиться, что восстановление завершено.

1. Получение временной метки резервного снимка​

Перед восстановлением необходимо определить имя снимка (Label) и временную метку, сформированную при завершении резервного копирования. Следующий SQL-запрос выводит список существующих резервных копий в Repository с именем example_repo:

mysql> SHOW SNAPSHOT ON example_repo;
+--------------------+---------------------+--------+
| Snapshot | Timestamp | Status |
+--------------------+---------------------+--------+
| exampledb_20241225 | 2022-04-08-15-52-29 | OK |
+--------------------+---------------------+--------+
1 row in set (0.15 sec)

Столбцы результата:

СтолбецОписание
SnapshotМетка Label снимка, указанная при создании резервной копии.
TimestampВременная метка, сформированная при завершении создания снимка. Используется как аргумент backup_timestamp оператора RESTORE.
StatusСостояние снимка в Repository. Значение OK означает, что снимок пригоден для использования.

2. Восстановление из снимка​

Выберите один из следующих четырёх вариантов в зависимости от набора восстанавливаемых объектов и целевого расположения.

Вариант 1: Восстановление снимка в текущую базу данных​

Восстановите снимок с меткой Label restore_label1 и временной меткой 2022-04-08-15-52-29 из Repository с именем example_repo в текущую базу данных:

RESTORE SNAPSHOT `restore_label1`
FROM `example_repo`
PROPERTIES
(
"backup_timestamp"="2022-04-08-15-52-29"
);

Вариант 2: Восстановление снимка в указанную базу данных​

Восстановите тот же снимок в базу данных с именем destdb. Этот вариант можно использовать для миграции между базами данных или для хранения копии данных в другой базе данных:

RESTORE SNAPSHOT destdb.`restore_label1`
FROM `example_repo`
PROPERTIES
(
"backup_timestamp"="2022-04-08-15-52-29"
);

Вариант 3: Восстановление отдельной таблицы из снимка​

Из снимка в example_repo с меткой Label restore_label1 и временной меткой 2022-04-08-15-52-29 восстановите только таблицу backup_tbl в текущую базу данных:

RESTORE SNAPSHOT `restore_label1`
FROM `example_repo`
ON ( `backup_tbl` )
PROPERTIES
(
"backup_timestamp"="2022-04-08-15-52-29"
);

Вариант 4: Восстановление разделов и таблиц из снимка​

Из резервного снимка snapshot_2 в example_repo восстановите разделы p1 и p2 таблицы backup_tbl и таблицу backup_tbl2 в текущую базу данных example_db1, переименовав backup_tbl2 в new_tbl. Временная метка снимка: 2018-05-04-17-11-01:

RESTORE SNAPSHOT `restore_label1`
FROM `example_repo`
ON
(
`backup_tbl` PARTITION (`p1`, `p2`),
`backup_tbl2` AS `new_tbl`
)
PROPERTIES
(
"backup_timestamp"="2022-04-08-15-55-43"
);

Основные параметры​

ПараметрОписание
SNAPSHOT <label>Метка Label этого задания восстановления, используемая для его идентификации в SHOW RESTORE.
FROM <repo>Имя Repository, в котором хранится резервная копия.
ON ( ... )Необязательный параметр. Задаёт объекты для восстановления. Может включать имена таблиц, предложение PARTITION (...) и предложение переименования AS <new_name>. Если параметр не указан, восстанавливаются все объекты снимка.
PROPERTIES("backup_timestamp"=...)Обязательный параметр. Временная метка восстанавливаемого снимка, соответствующая столбцу Timestamp в результате SHOW SNAPSHOT.

3. Проверка хода задания восстановления​

Используйте SHOW RESTORE, чтобы просмотреть состояние заданий восстановления в текущей базе данных и время, затраченное на каждый этап:

    mysql> SHOW RESTORE\G;
*************************** 1. row ***************************
JobId: 17891851
Label: snapshot_label1
Timestamp: 2022-04-08-15-52-29
DbName: default_cluster:example_db1
State: FINISHED
AllowLoad: false
ReplicationNum: 3
RestoreObjs: {
"name": "snapshot_label1",
"database": "example_db",
"backup_time": 1649404349050,
"content": "ALL",
"olap_table_list": [
{
"name": "backup_tbl",
"partition_names": [
"p1",
"p2"
]
}
],
"view_list": [],
"odbc_table_list": [],
"odbc_resource_list": []
}
CreateTime: 2022-04-08 15:59:01
MetaPreparedTime: 2022-04-08 15:59:02
SnapshotFinishedTime: 2022-04-08 15:59:05
DownloadFinishedTime: 2022-04-08 15:59:12
FinishedTime: 2022-04-08 15:59:18
UnfinishedTasks:
Progress:
TaskErrMsg:
Status: [OK]
Timeout: 86400
1 row in set (0.01 sec)

Основные поля:

ПолеОписание
JobIdВнутренний ID задания восстановления.
Label / TimestampМетка Label снимка и временная метка резервной копии, соответствующие этому восстановлению.
DbNameЦелевая база данных.
StateТекущее состояние задания. Значение FINISHED означает, что восстановление выполнено успешно.
RestoreObjsОбъекты, включённые в это восстановление: имена таблиц, списки разделов, представления и внешние таблицы.
CreateTime и другие поля времениВременные метки создания задания, подготовки метаданных, получения снимка, скачивания и окончательного завершения. Используйте их для выявления узких мест.
StatusСостояние ошибки. Значение [OK] означает отсутствие ошибок; в противном случае проверьте TaskErrMsg для диагностики.
TimeoutВремя ожидания завершения задания в секундах.