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 1000Crear 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 100Hacer 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')