Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Backup

Движок базы данных Backup позволяет мгновенно подключить таблицу/базу данных из резервных копий в режиме только для чтения.

Движок базы данных Backup работает как с инкрементными, так и с полными резервными копиями.

Создание базы данных

CREATE DATABASE backup_database
ENGINE = Backup('database_name_inside_backup', Disk('disk_name', 'backup_name'))

Пунктом назначения резервной копии может быть любой допустимый пункт назначения, например Disk, S3 или File. Оно передаётся как функция, например Disk('disk_name', 'backup_name').

Параметры движка

  • database_name_inside_backup — Имя базы данных в резервной копии.
  • backup_destination — Пункт назначения резервной копии.

Пример использования

Рассмотрим пример с пунктом назначения резервной копии 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;

С этой базой данных 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 │
└──────────────────────┴──────────────┘
Navigation