Backup 데이터베이스 엔진
Backup 데이터베이스 엔진
백업에서 테이블/데이터베이스를 읽기 전용 모드로 즉시 붙일 수 있게 해주는 데이터베이스 엔진이에요. 증분 백업과 비증분 백업 모두에서 동작해요.
출처: 문서
본문
데이터베이스 백업은 백업에서 테이블/데이터베이스를 읽기 전용 모드로 즉시 붙일 수 있게 해줘요. 데이터베이스 백업은 증분(incremental) 백업과 비증분 모두에서 동작해요.
데이터베이스 만들기 (Creating a database)
CREATE DATABASE backup_database
ENGINE = Backup('database_name_inside_backup', Disk('disk_name', 'backup_name'))
백업 대상은 Disk, S3, File 같은 유효한 백업 대상(destination)이면 무엇이든 될 수 있어요. 그것은 Disk('disk_name', 'backup_name') 같은 함수로 전달돼요.
엔진 매개변수 (Engine Parameters)
database_name_inside_backup— 백업 안의 데이터베이스 이름.backup_destination— 백업 대상.
사용 예시 (Usage example)
Disk 백업 대상을 사용하는 예를 들어 볼게요. 먼저 storage.xml에서 백업 디스크를 설정해요.
<storage_configuration>
<disks>
<backups>
<type>local</type>
<path>/home/ubuntu/ClickHouseWorkDir/backups/</path>
</backups>
</disks>
</storage_configuration>
<backups>
<allowed_disk>backups</allowed_disk>
<allowed_path>/home/ubuntu/ClickHouseWorkDir/backups/</allowed_path>
</backups>
사용 예시. 테스트 데이터베이스, 테이블을 만들고, 데이터를 넣은 다음 백업을 만들어 볼게요.
CREATE DATABASE test_database;
CREATE TABLE test_database.test_table_1 (id UInt64, value String) ENGINE=MergeTree ORDER BY id;
INSERT INTO test_database.test_table_1 VALUES (0, 'test_database.test_table_1');
CREATE TABLE test_database.test_table_2 (id UInt64, value String) ENGINE=MergeTree ORDER BY id;
INSERT INTO test_database.test_table_2 VALUES (0, 'test_database.test_table_2');
CREATE TABLE test_database.test_table_3 (id UInt64, value String) ENGINE=MergeTree ORDER BY id;
INSERT INTO test_database.test_table_3 VALUES (0, 'test_database.test_table_3');
BACKUP DATABASE test_database TO Disk('backups', 'test_database_backup');
이제 test_database_backup 백업이 생겼으니, Backup 데이터베이스를 만들어 볼게요.
CREATE DATABASE test_database_backup ENGINE = Backup('test_database', Disk('backups', 'test_database_backup'));
이제 데이터베이스에서 어떤 테이블이든 쿼리할 수 있어요.
SELECT id, value FROM test_database_backup.test_table_1;
┌─id─┬─value──────────────────────┐
│ 0 │ test_database.test_table_1 │
└────┴────────────────────────────┘
SELECT id, value FROM test_database_backup.test_table_2;
┌─id─┬─value──────────────────────┐
│ 0 │ test_database.test_table_2 │
└────┴────────────────────────────┘
SELECT id, value FROM test_database_backup.test_table_3;
┌─id─┬─value──────────────────────┐
│ 0 │ test_database.test_table_3 │
└────┴────────────────────────────┘
이 데이터베이스 Backup을 일반 데이터베이스처럼 작업하는 것도 가능해요. 예를 들어 그 안의 테이블을 조회할 수 있어요.
SELECT database, name FROM system.tables WHERE database = 'test_database_backup';
┌─database─────────────┬─name─────────┐
│ test_database_backup │ test_table_1 │
│ test_database_backup │ test_table_2 │
│ test_database_backup │ test_table_3 │
└──────────────────────┴──────────────┘