メインコンテンツまでスキップ
メインコンテンツまでスキップ

バックアップ

データベースバックアップでは、バックアップからテーブル/データベースを読み取り専用モードで瞬時にアタッチできます。

データベースバックアップは、増分バックアップと非増分バックアップの両方で機能します。

データベースの作成

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

バックアップ先は、DiskS3Fileなど、すべての有効なバックアップ宛先にすることができます。

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バックアップができました。次に、バックアップを使用してデータベースを作成しましょう:

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

このバックアップデータベースを普通のデータベースと同様に操作することも可能です。例えば、テーブルをクエリすることもできます:

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