Восстановление
В этом руководстве описано, как с помощью оператора Doris RESTORE восстановить базу данных, таблицу или раздел из резервного снимка в существующем Repository и отслеживать ход задания восстановления. Руководство охватывает такие сценарии, как откат данных, миграция в новый кластер, репликация между базами данных и исправление данных на уровне таблиц или разделов.
Сценарии использования
| Сценарий | Рекомендуемый подход | Описание |
|---|---|---|
| Восстановление всего снимка в текущую базу данных | Восстановление снимка в текущую базу данных | Наиболее распространённый случай. Все объекты снимка восстанавливаются в базу данных, выбранную командой USE. |
| Восстановление всего снимка в другую базу данных | Восстановление снимка в указанную базу данных | Используется для миграции между базами данных или для хранения копии данных в другой базе данных. |
| Восстановление из снимка только определённой таблицы | Восстановление отдельной таблицы из снимка | Используется, когда нужно откатить или перенести только одну определённую таблицу. |
| Восстановление указанных разделов или переименование таблицы при восстановлении | Восстановление разделов и таблиц из снимка | Поддерживает восстановление только части разделов и переименование таблиц при восстановлении с помощью AS, чтобы избежать перезаписи существующих объектов. |
Предварительные требования
- У вас есть права администратора для выполнения восстановления.
- Имеется пригодный для использования резервный снимок. Операции резервного копирования описаны в разделе Резервное копирование.
- Вы знаете имя Repository, в котором хранится резервная копия (в примерах используется
example_repo).
Обзор процесса восстановления
- Выполните запрос списка доступных снимков в целевом Repository, чтобы получить имя снимка и временную метку резервной копии.
- В зависимости от задачи выберите оператор
RESTOREдля восстановления всей базы данных, восстановления в другую базу данных, восстановления отдельной таблицы или отдельных разделов. - Используйте
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 | Время ожидания завершения задания в секундах. |