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의 내용을 비교합니다.

더 알아보기 (Learn more)