ClickHouse 백업·복원

ClickHouse 백업·복원 (Backup & Restore)

ClickHouse에서 복제(replication)는 하드웨어 장애로부터 보호하지만, 인적 실수(실수로 데이터 삭제, 잘못된 테이블·클러스터 삭제, 소프트웨어 버그로 인한 데이터 손상)로부터는 보호하지 못해요. 이런 실수는 보통 모든 복제본에 영향을 줘요. 그래서 미리 백업·복원 전략을 세워야 해요.

ClickHouse는 기본적으로 MergeTree 계열 엔진으로 50GB가 넘는 테이블을 바로 drop하지 못하게 막는 내장 안전장치가 있지만, 모든 경우를 다 덮지는 않아요. 1GB 데이터에 맞는 방법이 수십 PB 데이터에는 맞지 않을 수 있으니, 상황에 맞는 방법을 고르고 여러 방법을 병용하는 게 좋아요.

출처: https://clickhouse.com/docs/operations/backup

백업의 종류

백업은 여러 속성으로 나뉘어요.

  • 전체(full) 또는 증분(incremental)
  • 동기(synchronous) 또는 비동기(asynchronous)
  • 동시(concurrent) 또는 비동시(non-concurrent)
  • 압축(compressed) 또는 비압축(uncompressed)
  • named collections 사용 여부
  • 비밀번호 보호 여부
  • 시스템 테이블·로그·접근 관리 테이블 포함 여부

전체 vs 증분

  • 전체 백업: 데이터 전체 복사. 단순하고 독립적이며 신뢰할 수 있는 복구 방법이지만, 오래 걸리고 공간을 많이 써요.
  • 증분 백업: 마지막 전체 백업 이후의 델타. 시간과 공간이 효율적이지만 복원하려면 모든 백업이 필요해요.

대표적인 패턴은 주 1회 전체 + 매일 증분이에요.

BACKUP / RESTORE 문

BACKUP | RESTORE
  TABLE [db.]table_name [AS alias] | DICTIONARY ... | DATABASE db [AS alias]
  | TEMPORARY TABLE ... | VIEW ... | ALL [EXCEPT {...}]
[ON CLUSTER 'cluster_name']
TO|FROM File('<path>') | Disk('<disk>','<path>') | S3(...) | AzureBlobStorage(...)
[SETTINGS ...]
[ASYNC]

주요 구성 요소:

  • BACKUP / RESTORE — 백업 생성 / 복원.
  • TABLE [AS alias] — 특정 테이블(이름 변경 가능). PARTITION[S]로 특정 파티션만.
  • DATABASE [AS alias] — 데이터베이스 전체.
  • ALL — 모든 데이터베이스·테이블.
  • ON CLUSTER 'cluster_name' — 클러스터 전체 실행.
  • TO|FROM — 방향. TO는 백업 대상, FROM은 복원 원본.
  • File()/Disk()/S3()/AzureBlobStorage() — 저장 위치.
  • SETTINGS — 아래 설정들.
  • ASYNC — 백그라운드로 실행(즉시 반환).

주요 설정

설정 설명
id 작업 ID. 미지정 시 랜덤 UUID. 같은 ID의 실행이 있으면 예외.
compression_method 압축 방식 (lzma 등).
compression_level 압축 수준.
password ZIP 아카이브용 비밀번호. .zip, .zipx만 지원.
base_backup 증분 백업의 기준이 되는 곳. 예: Disk('backups', '1.zip').
structure_only 데이터 없이 CREATE 문만 백업.

예시:

BACKUP TABLE test.table TO Disk('backups', 'filename.zip')
SETTINGS compression_method='lzma', compression_level=3;

비동기 백업 추적

ASYNC 백업은 system.backups 테이블과 system.backup_log 시스템 로그로 추적할 수 있어요. BACKUP ... ASYNCidstatus(CREATING_BACKUP 등)를 즉시 반환해요.

SELECT * FROM system.backups WHERE id='7678b0b3-...' FORMAT Vertical

복제(cluster) 수준에는 하나의 백업/복원만 실행되도록 하려면 allow_concurrent_backupsallow_concurrent_restores 서버 설정을 false로 둬요.

꼭 기억할 점

  • 백업만 해두고 복원을 연습하지 않으면, 막상 필요할 때 제대로 안 될 가능성이 커요. 복원도 자동화하고 여유 클러스터에서 정기적으로 연습하세요.
  • 접근 관리(사용자·역할)는 SQL 기반으로 구성된 것만 백업·복원돼요. users.xml 설정 파일 기반 구성은 포함되지 않아요.

더 알아보기