Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

COPIA DE SEGURIDAD / RESTAURACIÓN hacia o desde un endpoint de S3

Este artículo trata sobre cómo hacer copias de seguridad o restaurarlas en/desde un bucket de S3 mediante un endpoint de S3.

Sintaxis

-- comandos principales
BACKUP | RESTORE 
--- qué respaldar/restaurar (o excluir)
TABLE [db.]table_name           [AS [db.]table_name_in_backup] |
DICTIONARY [db.]dictionary_name [AS [db.]name_in_backup] |
DATABASE database_name          [AS database_name_in_backup] |
TEMPORARY TABLE table_name      [AS table_name_in_backup] |
VIEW view_name                  [AS view_name_in_backup] |
[EXCEPT TABLES ...] |
ALL [EXCEPT {TABLES|DATABASES}...] } [,...]
--- 
[ON CLUSTER 'cluster_name']
--- dónde respaldar o restaurar (destino u origen)
TO|FROM 
File('<path>/<filename>') | 
Disk('<disk_name>', '<path>/') | 
S3('<S3 endpoint>/<path>', '<Access key ID>', '<Secret access key>', '<extra_credentials>') |
AzureBlobStorage('<connection string>/<url>', '<container>', '<path>', '<account name>', '<account key>')
--- configuración adicional
[SETTINGS ...]
[ASYNC]

Consulte "resumen de comandos" para obtener más información sobre cada comando.

Ejemplo de uso

Copia de seguridad incremental a un endpoint de S3

En este ejemplo, crearemos una copia de seguridad en un endpoint de S3 y luego la restauraremos desde él.

Necesitarás la siguiente información para usar este método:

Parámetro Ejemplo
Un endpoint de S3 https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/
ID de clave de acceso BKIOZLE2VYN3VXXTP9RC
Clave de acceso secreta 40bwYnbqN7xU8bVePaUCh3+YEyGXu8UOMV9ANpwL

El destino de una copia de seguridad se especifica de la siguiente manera:

S3('<s3 endpoint>/<directory>', '<access key id>', '<secret access key>', '<extra_credentials>')

Configuración

Cree la siguiente base de datos y tabla, e inserte algunos datos aleatorios:

CREATE DATABASE IF NOT EXISTS test_db;
CREATE TABLE test_db.test_table
(
    `key` Int,
    `value` String,
    `array` Array(String)
)
ENGINE = MergeTree
ORDER BY tuple()
INSERT INTO test_db.test_table SELECT *
FROM generateRandom('key Int, value String, array Array(String)')
LIMIT 1000

Crear una copia de seguridad base

Las copias de seguridad incrementales requieren una copia de seguridad base como punto de partida. El primer parámetro del destino S3 es el endpoint de S3, seguido del directorio dentro del bucket que se usará para esta copia de seguridad. En este ejemplo, el directorio se llama my_backup.

Ejecuta el siguiente comando para crear la copia de seguridad base:

BACKUP TABLE test_db.test_table TO S3(
'https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/base_backup',
'<access key id>',
'<secret access key>'
)
┌─id───────────────────────────────────┬─status─────────┐
│ de442b75-a66c-4a3c-a193-f76f278c70f3 │ BACKUP_CREATED │
└──────────────────────────────────────┴────────────────┘

Agregar más datos

Las copias de seguridad incrementales contienen la diferencia entre la copia de seguridad base y el contenido actual de la tabla de la que se está haciendo una copia de seguridad. Agregue más datos antes de realizar la copia de seguridad incremental:

INSERT INTO test_db.test_table SELECT *
FROM generateRandom('key Int, value String, array Array(String)')
LIMIT 100

Hacer una copia de seguridad incremental

Este comando de copia de seguridad es similar al de la copia de seguridad base, pero añade SETTINGS base_backup y la ubicación de la copia de seguridad base. Ten en cuenta que el destino de la copia de seguridad incremental no es el mismo directorio que el de la base, sino el mismo endpoint con un directorio de destino distinto dentro del bucket. La copia de seguridad base está en my_backup, y la incremental se escribirá en my_incremental:

BACKUP TABLE test_db.test_table TO S3(
'https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/incremental_backup',
'<access key id>',
'<secret access key>'
)
SETTINGS base_backup = S3(
'https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/base_backup',
'<access key id>',
'<secret access key>'
)
┌─id───────────────────────────────────┬─status─────────┐
│ f6cd3900-850f-41c9-94f1-0c4df33ea528 │ BACKUP_CREATED │
└──────────────────────────────────────┴────────────────┘

Restaurar desde la copia de seguridad incremental

Este comando restaura la copia de seguridad incremental en una tabla nueva, test_table_restored. Ten en cuenta que, al restaurar una copia de seguridad incremental, también se incluye la copia de seguridad base. Al restaurar, especifica solo la copia de seguridad incremental:

RESTORE TABLE data AS test_db.test_table_restored FROM S3(
'https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/incremental_backup',
'<access key id>',
'<secret access key>'
)
┌─id───────────────────────────────────┬─status───┐
│ ff0c8c39-7dff-4324-a241-000796de11ca │ RESTORED │
└──────────────────────────────────────┴──────────┘

Verifique el recuento

Hubo dos inserciones en la tabla original data: una de 1.000 filas y otra de 100, para un total de 1.100. Verifique que la tabla restaurada tenga 1.100 filas:

SELECT count()
FROM test_db.test_table_restored
┌─count()─┐
│    1100 │
└─────────┘

Verifique el contenido

Aquí se compara el contenido de la tabla original, test_table, con el de la tabla restaurada test_table_restored:

SELECT throwIf((
   SELECT groupArray(tuple(*))
   FROM test_db.test_table
   ) != (
   SELECT groupArray(tuple(*))
   FROM test_db.test_table_restored
), 'Data does not match after BACKUP/RESTORE')
Navigation