메인 콘텐츠로 건너뛰기
이 문서에서는 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에서 복원합니다.
전체 Backup과 증분 Backup의 차이점에 대한 설명은 “백업 유형”을 참조하십시오.
이 메서드를 사용하려면 다음 정보가 필요합니다:
매개변수예시
S3 엔드포인트https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/
액세스 키 IDBKIOZLE2VYN3VXXTP9RC
비밀 액세스 키40bwYnbqN7xU8bVePaUCh3+YEyGXu8UOMV9ANpwL
S3 버킷을 생성하는 방법은 “S3 객체 스토리지를 ClickHouse 디스크로 사용” 섹션에서 설명합니다.
Backup 대상은 다음과 같이 지정합니다:
S3('<s3 endpoint>/<directory>', '<access key id>', '<secret access key>', '<extra_credentials>')

1

설정

다음 데이터베이스와 테이블을 생성하고 여기에 무작위 데이터를 몇 건 삽입하세요:
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

기준 백업 생성

증분 백업을 수행하려면 시작점이 되는 기준 백업이 필요합니다. 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

데이터 더 추가하기

증분 백업에는 기준 백업과 백업 대상 테이블의 현재 내용 간 차이가 반영됩니다. 증분 백업을 수행하기 전에 데이터를 더 추가하십시오:
INSERT INTO test_db.test_table SELECT *
FROM generateRandom('key Int, value String, array Array(String)')
LIMIT 100
4

증분 백업 수행

이 백업 명령은 기준 백업과 유사하지만, 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 │
└──────────────────────────────────────┴────────────────┘
5

증분 백업에서 복원

이 명령은 증분 백업을 새 테이블 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 │
└──────────────────────────────────────┴──────────┘
6

개수 확인

원본 테이블 data에는 2번 삽입되었습니다. 한 번은 1,000행, 다른 한 번은 100행으로, 총 1,100행입니다. 복원된 테이블에 1,100행이 있는지 확인하십시오:
SELECT count()
FROM test_db.test_table_restored
┌─count()─┐
│    1100 │
└─────────┘
7

내용 확인

원본 테이블 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')
마지막 수정일 2026년 6월 10일