이 문서에서는 S3 엔드포인트를 통해 S3 버킷으로 Backup하거나 S3 버킷에서 복원하는 방법을 설명합니다.
구문
-- 핵심 명령어
BACKUP | RESTORE
--- 백업/복원 대상 (또는 제외 대상)
TABLE [db.]table_name [AS [db.]table_name_in_backup] |
DICTIONARY [db.]dictionary_name [AS [db.]name_in_backup] |
DATABASE database_name [AS database_name_in_backup] |
TEMPORARY TABLE table_name [AS table_name_in_backup] |
VIEW view_name [AS view_name_in_backup] |
[EXCEPT TABLES ...] |
ALL [EXCEPT {TABLES|DATABASES}...] } [,...]
---
[ON CLUSTER 'cluster_name']
--- 백업 또는 복원 위치
TO|FROM
File('<path>/<filename>') |
Disk('<disk_name>', '<path>/') |
S3('<S3 endpoint>/<path>', '<Access key ID>', '<Secret access key>', '<extra_credentials>') |
AzureBlobStorage('<connection string>/<url>', '<container>', '<path>', '<account name>', '<account key>')
--- 추가 설정
[SETTINGS ...]
[ASYNC]각 명령에 대한 자세한 내용은 "명령 요약"을 확인하십시오.
사용 예시
S3 엔드포인트에 증분 Backup
이 예시에서는 S3 엔드포인트에 Backup을 생성한 다음, 다시 해당 Backup에서 복원합니다.
이 메서드를 사용하려면 다음 정보가 필요합니다:
| 매개변수 | 예시 |
|---|---|
| S3 엔드포인트 | https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/ |
| 액세스 키 ID | BKIOZLE2VYN3VXXTP9RC |
| 비밀 액세스 키 | 40bwYnbqN7xU8bVePaUCh3+YEyGXu8UOMV9ANpwL |
Backup 대상은 다음과 같이 지정합니다:
S3('<s3 endpoint>/<directory>', '<access key id>', '<secret access key>', '<extra_credentials>')설정
다음 데이터베이스와 테이블을 생성하고 여기에 무작위 데이터를 몇 건 삽입하세요:
CREATE DATABASE IF NOT EXISTS test_db;
CREATE TABLE test_db.test_table
(
`key` Int,
`value` String,
`array` Array(String)
)
ENGINE = MergeTree
ORDER BY tuple()INSERT INTO test_db.test_table SELECT *
FROM generateRandom('key Int, value String, array Array(String)')
LIMIT 1000기준 백업 생성
증분 백업을 수행하려면 시작점이 되는 기준 백업이 필요합니다. S3 대상의 첫 번째 매개변수는 S3 엔드포인트이며, 그다음에는
이 백업에 사용할 버킷 내 디렉터리가 지정됩니다. 이 예시에서 디렉터리 이름은 my_backup입니다.
기준 백업을 생성하려면 다음 명령을 실행하세요:
BACKUP TABLE test_db.test_table TO S3(
'https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/base_backup',
'<access key id>',
'<secret access key>'
)┌─id───────────────────────────────────┬─status─────────┐
│ de442b75-a66c-4a3c-a193-f76f278c70f3 │ BACKUP_CREATED │
└──────────────────────────────────────┴────────────────┘데이터 더 추가하기
증분 백업에는 기준 백업과 백업 대상 테이블의 현재 내용 간 차이가 반영됩니다. 증분 백업을 수행하기 전에 데이터를 더 추가하십시오:
INSERT INTO test_db.test_table SELECT *
FROM generateRandom('key Int, value String, array Array(String)')
LIMIT 100증분 백업 수행
이 백업 명령은 기준 백업과 유사하지만, SETTINGS base_backup과 기준 백업의 위치를 추가로 지정합니다. 증분 백업의 대상은 기준 백업과 같은 디렉터리가 아닙니다. 동일한 endpoint를 사용하지만, 버킷 내에서는 다른 대상 디렉터리를 사용합니다. 기준 백업은 my_backup에 있고, 증분 백업은 my_incremental에 기록됩니다:
BACKUP TABLE test_db.test_table TO S3(
'https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/incremental_backup',
'<access key id>',
'<secret access key>'
)
SETTINGS base_backup = S3(
'https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/base_backup',
'<access key id>',
'<secret access key>'
)┌─id───────────────────────────────────┬─status─────────┐
│ f6cd3900-850f-41c9-94f1-0c4df33ea528 │ BACKUP_CREATED │
└──────────────────────────────────────┴────────────────┘증분 백업에서 복원
이 명령은 증분 백업을 새 테이블 test_table_restored로 복원합니다.
증분 백업을 복원하면 기준 백업도 함께 복원됩니다.
복원할 때는 증분 백업만 지정하십시오:
RESTORE TABLE data AS test_db.test_table_restored FROM S3(
'https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/incremental_backup',
'<access key id>',
'<secret access key>'
)┌─id───────────────────────────────────┬─status───┐
│ ff0c8c39-7dff-4324-a241-000796de11ca │ RESTORED │
└──────────────────────────────────────┴──────────┘개수 확인
원본 테이블 data에는 2번 삽입되었습니다. 한 번은 1,000행, 다른 한 번은 100행으로, 총 1,100행입니다.
복원된 테이블에 1,100행이 있는지 확인하십시오:
SELECT count()
FROM test_db.test_table_restored┌─count()─┐
│ 1100 │
└─────────┘내용 확인
원본 테이블 test_table의 내용과 복원된 테이블 test_table_restored의 내용을 비교합니다:
SELECT throwIf((
SELECT groupArray(tuple(*))
FROM test_db.test_table
) != (
SELECT groupArray(tuple(*))
FROM test_db.test_table_restored
), 'Data does not match after BACKUP/RESTORE')