S3 엔드포인트로/에서 BACKUP / RESTORE
S3 엔드포인트로/에서 BACKUP / RESTORE
이 문서에서는 S3 엔드포인트를 통해 S3 버킷으로/에서 백업을 생성하고 복원하는 방법을 다룹니다. 특히 증분 백업을 만들고 복원하는 전체 과정을 예시로 설명할게요.
출처: 문서
본문
이 문서는 S3 엔드포인트를 통해 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]
각 명령의 자세한 내용은 “명령 요약(command summary)”를 참고하세요.
사용 예시
S3 엔드포인트로의 증분 백업
이 예시에서는 S3 엔드포인트에 백업을 만들고 다시 복원합니다.
전체 백업과 증분 백업의 차이에 대한 설명은 “백업 유형(Backup types)”을 참고하세요.
이 방법을 사용하려면 다음 정보가 필요합니다:
| 매개변수 | 예시 |
|---|---|
| S3 엔드포인트 | https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/ |
| Access key ID | BKIOZLE2VYN3VXXTP9RC |
| Secret access key | 40bwYnbqN7xU8bVePaUCh3+YEyGXu8UOMV9ANpwL |
S3 버킷 생성은 “ClickHouse 디스크로 S3 오브젝트 스토리지 사용하기” 섹션에서 다룹니다.
백업 대상은 다음과 같이 지정됩니다:
S3('<s3 endpoint>/<directory>', '<access key id>', '<secret access key>', '<extra_credentials>')
1 설정 (Setup)
다음 데이터베이스와 테이블을 만들고 임의의 데이터를 삽입합니다:
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
2 기본 백업 생성 (Create a base backup)
증분 백업은 시작할 기본(base) 백업이 필요합니다. 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 │
└──────────────────────────────────────┴────────────────┘
3 데이터 추가 (Add more data)
증분 백업에는 기본 백업과 현재 백업 대상 테이블 내용의 차이가 채워집니다. 증분 백업을 만들기 전에 데이터를 더 추가하세요:
INSERT INTO test_db.test_table SELECT *
FROM generateRandom('key Int, value String, array Array(String)')
LIMIT 100
4 증분 백업 생성 (Take an incremental backup)
이 백업 명령은 기본 백업과 유사하지만 SETTINGS base_backup과 기본 백업의 위치를 추가합니다. 증분 백업의 대상은 기본과 같은 디렉터리가 아니라, 같은 엔드포인트의 버킷 내 다른 대상 디렉터리라는 점에 유의하세요. 기본 백업은 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 │
└──────────────────────────────────────┴────────────────┘
5 증분 백업에서 복원 (Restore from the incremental backup)
이 명령은 증분 백업을 새 테이블 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>'
)
6 개수 확인 (Verify the count)
원본 테이블 data에 1,000행과 100행 두 번의 삽입이 있었으므로 총 1,100행입니다. 복원된 테이블에 1,100행이 있는지 확인하세요.
7 내용 확인 (Verify the content)
원본 테이블 test_table과 복원된 테이블 test_table_restored의 내용을 비교합니다.