En esta página, se describe cómo usar la recuperación de un momento determinado (PITR) para retener y recuperar datos en Cloud Spanner.
Para obtener más información, consulta Recuperación de un momento determinado.
Prerequisites
En esta guía, se usa la base de datos y el esquema como se define en la guía de inicio rápido de Cloud Spanner. Puedes ejecutar la guía de inicio rápido para crear la base de datos y el esquema, o modificar los comandos para usarlos con tu propia base de datos.
Configura el período de retención
Para establecer el período de retención de tu base de datos, sigue estos pasos:
Console
Ve a la página Instancias de Cloud Spanner en Console.
Haz clic en la instancia que contiene la base de datos para abrir su página de descripción general.
Haz clic en la base de datos para abrir la página Descripción general.
Selecciona la pestaña Copia de seguridad y restablecimiento.
Haz clic en el ícono de lápiz en el campo Período de retención de la versión.
Ingresa una cantidad y una unidad de tiempo para el período de retención y, luego, haz clic en Actualizar.
gcloud
Actualiza el esquema de la base de datos con la declaración ALTER DATABASE. Por ejemplo:
gcloud spanner databases ddl update example-db --instance=test-instance \
--ddl='ALTER DATABASE `example-db` SET OPTIONS (version_retention_period="7d");'
Para ver el período de retención, obtén el DDL de tu base de datos:
gcloud spanner databases ddl describe example-db --instance=test-instance
Este es el resultado:
ALTER DATABASE example-db SET OPTIONS (
version_retention_period = '7d'
);
...
Bibliotecas cliente
C#
C++
Go
Java
Nodo
PHP
Python
Ruby
Notas de uso:
- El período de retención debe ser de entre 1 hora y 7 días, y se puede especificar en días, horas, minutos o segundos. Por ejemplo, los valores
1d
,24h
,1440m
y86400s
son equivalentes. - Si habilitaste el registro para la API de Cloud Spanner en el proyecto, el evento se registra como UpdateDatabaseDdl y se puede ver en el Explorador de registros.
- Para volver al período de retención predeterminado de 1 hora, puedes configurar el valor en 1 hora o
NULL
. - Cuando extiendes el período de retención, el sistema no reabastece las versiones anteriores de datos. Por ejemplo, si extiendes el período de retención de 1 h a 24 h, debes esperar 23 h para que el sistema acumule datos antiguos antes de que puedas recuperar datos de 24 h en el pasado.
Obtén el período de retención y la hora de la primera versión
El recurso Database incluye los siguientes dos campos:
version_retention_period
: El período en el que Cloud Spanner retiene todas las versiones de datos para la base de datos.earliest_version_time
: La marca de tiempo más antigua en la que se pueden leer versiones anteriores de los datos desde la base de datos Cloud Spanner actualiza este valor de forma continua y se vuelve inactivo en el momento de la consulta. Si usas este valor para recuperar datos, asegúrate de tener en cuenta el tiempo desde el momento en que se consulta el valor hasta el momento en que inicias la recuperación.
Console
Ve a la página Instancias de Cloud Spanner en Console.
Haz clic en la instancia que contiene la base de datos para abrir su página de descripción general.
Haz clic en la base de datos para abrir la página Descripción general.
Selecciona la pestaña Backup/Restore para abrir la página Backup/Restore y mostrar el período de retención.
Haz clic en Crear para abrir la página Crear una copia de seguridad y mostrar la hora de la versión anterior.
gcloud
Para obtener estos campos, llama a describe databases o enumera bases de datos. Por ejemplo:
gcloud spanner databases describe example-db --instance=test-instance
Este es el resultado:
createTime: '2020-09-07T16:56:08.285140Z'
earliestVersionTime: '2020-10-07T16:56:08.285140Z'
name: projects/my-project/instances/test-instance/databases/example-db
state: READY
versionRetentionPeriod: 3d
Recupera una parte de la base de datos
Realiza una lectura inactiva y especifica la marca de tiempo de recuperación deseada. Asegúrate de que la marca de tiempo que especifiques sea más reciente que la de la base de datos
earliest_version_time.
.gcloud
Usa execute-sql. Por ejemplo:
gcloud spanner databases execute-sql example-db --instance=test-instance --read-timestamp=2020-09-11T10:19:36.010459-07:00 --sql='SELECT * FROM SINGERS'
Bibliotecas cliente
Consulta Realiza una lectura inactiva.
Almacenar los resultados de la consulta Esto es necesario porque no puede escribir los resultados de la consulta en la base de datos de la misma transacción. Puedes imprimir en la consola o almacenar en la memoria para cantidades pequeñas de datos. Para grandes cantidades de datos, quizás necesites escribir en un archivo o tabla temporal.
Vuelve a escribir los datos recuperados en la base de datos, por ejemplo:
gcloud
gcloud spanner rows update --instance=test-instance --database=example-db --table=Singers --data=SingerId=1,FirstName=10
Para obtener más información, consulta Actualiza datos con gcloud.
Bibliotecas cliente
Consulta Actualiza datos mediante DML o Actualiza datos con mutaciones.
Recupera una base de datos completa
Para recuperar toda la base de datos, puedes usar Copia de seguridad y restablecimiento, o Importar y exportar, y especificar una marca de tiempo de recuperación.
Copia de seguridad y restablecimiento
Crea una copia de seguridad y establece
version_time
en la marca de tiempo de recuperación deseada.Console
Ve a la página Detalles de la base de datos en Cloud Console.
En la pestaña Backup/Restore, haz clic en Create.
Marca la casilla Crear copia de seguridad de un momento anterior.
gcloud
gcloud spanner backups create example-db-backup-1 --instance=test-instance \ --database=example-db --retention-period=1y --version-time=2021-01-22T01:10:35Z --async
Para obtener más información, consulta Crea una copia de seguridad con gcloud.
Bibliotecas cliente
C#
C++
Go
Java
Nodo
PHP
Python
Ruby
Restablece la copia de seguridad a una base de datos nueva. Tenga en cuenta que Cloud Spanner conserva la configuración del período de retención de la copia de seguridad a la base de datos restablecida.
Console
Ve a la página Detalles de la instancia en Cloud Console.
En la pestaña Backup/Restore, selecciona una copia de seguridad y haz clic en Restore.
gcloud
gcloud spanner databases restore --async \ --destination-instance=destination-instance --destination-database=example-db-restored \ --source-instance=test-instance --source-backup=example-db-backup-1
Para obtener más información, consulta Restablece una base de datos desde una copia de seguridad.
Bibliotecas cliente
C#
C++
Go
Java
Nodo
PHP
Python
Ruby
Importación y exportación
Exporta la base de datos y especifica el parámetro
snapshotTime
en la marca de tiempo de recuperación deseada.Console
Ve a la página Detalles de la instancia en Cloud Console.
En la pestaña Importar/Exportar, haz clic en Exportar.
Marca la casilla Exportar base de datos de un momento anterior.
Si deseas obtener instrucciones detalladas, consulta cómo exportar una base de datos.
gcloud
Usar la plantilla de Dataflow Cloud Spanner a Avro para exportar la base de datos
gcloud dataflow jobs run JOB_NAME \ --gcs-location='gs://cloud-spanner-point-in-time-recovery/Import Export Template/export/templates/Cloud_Spanner_to_GCS_Avro' --region=DATAFLOW_REGION --parameters='instanceId=test-instance,databaseId=example-db,outputDir=YOUR_GCS_DIRECTORY,snapshotTime=2020-09-01T23:59:40.125245Z'
Notas de uso:
- Puedes hacer un seguimiento del progreso de tus trabajos de importación y exportación en Dataflow Console.
- Cloud Spanner garantiza que los datos exportados sean coherentes de forma externa y transaccional en la marca de tiempo especificada.
- Especifica la marca de tiempo en formato RFC 3339. Por ejemplo, 2020-09-01T23:59:30.234233Z.
- Asegúrate de que la marca de tiempo que especifiques sea más reciente que la de la base de datos
earliest_version_time
. Si los datos ya no existen en la marca de tiempo especificada, verás un error.
Importar a una nueva base de datos
Console
Ve a la página Detalles de la instancia en Cloud Console.
En la pestaña Importar/Exportar, haz clic en Importar.
Para obtener instrucciones detalladas, consulta Importa archivos Avro de Cloud Spanner.
gcloud
Utilice la plantilla de Dataflow Cloud Storage Avro a Cloud Spanner para importar los archivos Avro.
gcloud dataflow jobs run JOB_NAME \ --gcs-location='gs://cloud-spanner-point-in-time-recovery/Import Export Template/import/templates/GCS_Avro_to_Cloud_Spanner' \ --region=DATAFLOW_REGION \ --staging-location=YOUR_GCS_STAGING_LOCATION \ --parameters='instanceId=test-instance,databaseId=example-db,inputDir=YOUR_GCS_DIRECTORY'
Estimar el aumento del almacenamiento
Antes de aumentar el período de retención de una versión de la base de datos, puedes estimar el aumento esperado en el uso del almacenamiento de la base de datos si quieres totalizar los bytes de la transacción para el período deseado. Por ejemplo, la siguiente consulta calcula la cantidad de GiB escrito en los últimos 7 días (168 h) mediante la lectura de las tablas de estadísticas de transacción.
SQL estándar de Google
SELECT
SUM(bytes_per_hour) / (1024 * 1024 * 1024 ) as GiB
FROM (
SELECT
((commit_attempt_count - commit_failed_precondition_count - commit_abort_count) * avg_bytes) AS bytes_per_hour,
interval_end
FROM
spanner_sys.txn_stats_total_hour
ORDER BY
interval_end DESC
LIMIT
168);
PostgreSQL
SELECT
bph / (1024 * 1024 * 1024 ) as GiB
FROM (
SELECT
SUM(bytes_per_hour) as bph
FROM (
SELECT
((commit_attempt_count - commit_failed_precondition_count - commit_abort_count) * avg_bytes) AS bytes_per_hour,
interval_end
FROM
spanner_sys.txn_stats_total_hour
ORDER BY
interval_end DESC
LIMIT
168)
sub1) sub2;
Tenga en cuenta que la consulta proporciona una estimación aproximada y puede ser inexacta por varios motivos:
- La consulta no tiene en cuenta la marca de tiempo que se debe almacenar para cada versión de datos antiguos. Si tu base de datos está formada por muchos tipos de datos pequeños, la consulta puede subestimar el aumento de almacenamiento.
- La consulta incluye todas las operaciones de escritura, pero solo las operaciones de actualización crean versiones anteriores de los datos. Si su carga de trabajo incluye muchas operaciones de inserción, es posible que la consulta sobrestime el aumento de almacenamiento.