BACKUP TABLE data TO Disk('s3_plain', 'cloud_backup');RESTORE TABLE data AS data_restored FROM Disk('s3_plain', 'cloud_backup');
이 디스크는 MergeTree 자체에는 사용하지 말고, BACKUP/RESTORE에만 사용하십시오.
테이블이 S3 storage를 사용하고 디스크 유형이 서로 다르면,
파트를 대상 버킷으로 복사할 때 CopyObject 호출을 사용하지 않고
대신 다운로드한 뒤 다시 업로드하므로 매우 비효율적입니다. 이런 경우에는
이 용도에는 BACKUP ... TO S3(<endpoint>) 구문을 사용하는 것이 좋습니다.
위 RESTORE는 테이블 test.table에 데이터가 있으면 실패합니다.
설정 allow_non_empty_tables=true를 사용하면 RESTORE TABLE이 비어 있지 않은 테이블에도 데이터를 삽입할 수 있습니다.
이 경우 테이블에 있던 기존 데이터와 백업에서 추출한 데이터가 섞이게 됩니다.
따라서 이 설정은 테이블에 데이터 중복을 일으킬 수 있으므로 주의해서 사용해야 합니다.
이미 데이터가 있는 테이블을 복원하려면 다음을 실행하세요:
RESTORE TABLE test_db.test_table FROM Disk('backups', '1.zip')SETTINGS allow_non_empty_tables=true
새 이름으로 테이블을 복원하거나 백업할 수 있습니다:
RESTORE TABLE test_db.test_table AS test_db.test_table_renamed FROM Disk('backups', '1.zip')
ClickHouse에서 기준 백업은 이후의
증분 백업을 생성하는 기준이 되는 최초의 전체 백업입니다. 증분 백업은
기준 백업 이후의 변경 사항만 저장하므로, 어떤 증분 백업에서든
복원할 수 있도록 기준 백업을 계속 사용할 수 있는 상태로 유지해야 합니다.
기준 백업 대상은 setting
base_backup으로 설정할 수 있습니다.
증분 백업은 기준 백업에 의존합니다. 증분 백업에서 복원할 수 있으려면
기준 백업을 계속 사용할 수 있는 상태로 유지해야 합니다.
테이블의 증분 백업을 만들려면 먼저 기준 백업을 만드십시오:
BACKUP TABLE test_db.test_table TO Disk('backups', 'd.zip')
BACKUP TABLE test_db.test_table TO Disk('backups', 'incremental-a.zip')SETTINGS base_backup = Disk('backups', 'd.zip')
증분 백업과 기준 백업의 모든 데이터는 다음 명령을 사용해 새 테이블 test_db.test_table2로 복원할 수 있습니다:
RESTORE TABLE test_db.test_table AS test_db.test_table2FROM Disk('backups', 'incremental-a.zip');
디스크에 기록되는 Backup 파일에는 비밀번호를 설정할 수 있습니다.
비밀번호는 password 설정을 사용하여 지정할 수 있습니다.
비밀번호 보호는 ZIP 아카이브(.zip, .zipx)에서만 지원됩니다.
비밀번호가 적용되려면 Backup 경로가 .zip 또는 .zipx로 끝나야 합니다.
tar 아카이브 및 아카이브가 아닌 경로를 포함한 다른 포맷에서 비밀번호를 사용하면
BAD_ARGUMENTS 오류가 발생합니다: Password is not applicable, backup cannot be encrypted.
테이블에 속한 특정 파티션만 복원해야 하는 경우 해당 파티션을 지정할 수 있습니다.4개의 파티션으로 이루어진 간단한 테이블을 만들고 데이터를 삽입한 다음,
첫 번째와 네 번째 파티션만 백업해 보겠습니다:
설정
CREATE IF NOT EXISTS test_db;-- 파티션된 테이블 생성CREATE TABLE test_db.partitioned ( id UInt32, data String, partition_key UInt8) ENGINE = MergeTree()PARTITION BY partition_keyORDER BY id;INSERT INTO test_db.partitioned VALUES(1, 'data1', 1),(2, 'data2', 2),(3, 'data3', 3),(4, 'data4', 4);SELECT count() FROM test_db.partitioned;SELECT partition_key, count() FROM test_db.partitionedGROUP BY partition_keyORDER BY partition_key;