Перейти к основному содержимому
Перейти к основному содержимому

Backup

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

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

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

CREATE DATABASE backup_database
ENGINE = Backup('database_name_inside_backup', 'backup_destination')

Назначение резервного копирования может быть любым действительным назначением для резервного копирования, таким как Disk, S3, File.

При назначении резервного копирования Disk запрос на создание базы данных из резервной копии выглядит следующим образом:

CREATE DATABASE backup_database
ENGINE = Backup('database_name_inside_backup', 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;

┌─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 │
└──────────────────────┴──────────────┘