Restaurar una copia de seguridad
Restaura las bases de datos PostgreSQL de IBM Bob desde una copia de seguridad para recuperarse de una pérdida de datos, migrar entornos o volver a un estado conocido como válido.
Usa este procedimiento para restaurar IBM Bob y las bases de datos PostgreSQL relacionadas desde archivos de backup. El proceso de restauración incluye validar la integridad del backup, preparar el entorno, recrear la base de datos de destino, restaurar el contenido del backup y verificar los datos restaurados antes de devolver los servicios de la aplicación al servicio.
Restaurar una base de datos reemplaza el contenido existente de la base de datos con los datos del archivo de backup seleccionado. Los servicios de la aplicación deben detenerse antes de comenzar, ya que las escrituras activas en la base de datos pueden corromper el proceso de restauración. Prueba siempre los procedimientos de restauración en un entorno que no sea de producción antes de realizar una recuperación en producción.
Antes de empezar
Antes de restaurar una base de datos, verifica lo siguiente:
Verificar la integridad del backup
# Access backup PVC
oc run backup-verify -n <bob-instance-namespace> --image=busybox --rm -it --restart=Never \
--overrides='{
"spec": {
"containers": [{
"name": "backup-verify",
"image": "busybox",
"command": ["sh"],
"stdin": true,
"tty": true,
"volumeMounts": [{
"name": "backup",
"mountPath": "/backups"
}]
}],
"volumes": [{
"name": "backup",
"persistentVolumeClaim": {
"claimName": "bob-db-backup-pvc"
}
}]
}
}'
# Inside the pod:
cd /backups/bob-db
gunzip -t backup_bob_20260902_020000.sql.gz # Test gzip integrity
cat backup_bob_20260902_020000.sql.gz.meta # Check metadataConfirmar los detalles del backup
- La marca de tiempo del backup coincide con el punto de restauración esperado.
- El nombre de la base de datos es correcto.
- El tamaño del backup es razonable.
- El archivo de metadatos existe y es legible.
Crear un backup previo a la restauración
Antes de restaurar, realiza una copia de seguridad del estado actual de la base de datos:
oc exec -n <bob-instance-namespace> bob-db-1 -- \
pg_dump -U postgres bob | gzip > pre-restore-backup-$(date +%Y%m%d_%H%M%S).sql.gzProcedimiento de restauración
Detén todos los servicios de la aplicación IBM Bob para evitar escrituras en la base de datos durante la restauración.
# Scale down Bob services
oc scale deployment bob-admin-service --replicas=0 -n <bob-instance-namespace>
oc scale deployment bob-api-service --replicas=0 -n <bob-instance-namespace>
oc scale deployment bob-ui-service --replicas=0 -n <bob-instance-namespace>
# Verify pods are terminated
oc get pods -n <bob-instance-namespace> -l app.kubernetes.io/name=bobCrea un pod de restauración temporal que tenga acceso tanto a la base de datos PostgreSQL como a la ubicación de almacenamiento del backup.
# Get PostgreSQL image
POSTGRES_IMAGE=$(oc get cluster bob-db -n <bob-instance-namespace> -o jsonpath='{.spec.imageName}')
# Create restore pod
oc run postgres-restore -n <bob-instance-namespace> --image=$POSTGRES_IMAGE --rm -it --restart=Never \
--overrides='{
"spec": {
"containers": [{
"name": "restore",
"image": "'$POSTGRES_IMAGE'",
"command": ["bash"],
"stdin": true,
"tty": true,
"env": [
{"name": "PGHOST", "value": "bob-db-rw"},
{"name": "PGPORT", "value": "5432"},
{"name": "PGUSER", "value": "postgres"},
{"name": "PGPASSWORD", "valueFrom": {"secretKeyRef": {"name": "bob-db-app", "key": "password"}}}
],
"volumeMounts": [{
"name": "backup",
"mountPath": "/backups"
}]
}],
"volumes": [{
"name": "backup",
"persistentVolumeClaim": {
"claimName": "bob-db-backup-pvc"
}
}]
}
}'Dentro del pod de restauración, verifica el archivo de backup y prueba la conexión a la base de datos:
# List available backups
ls -lh /backups/bob-db/
# Verify backup file
BACKUP_FILE="/backups/bob-db/backup_bob_20260902_020000.sql.gz"
gunzip -t $BACKUP_FILE
echo "Backup file is valid"
# Check metadata
cat ${BACKUP_FILE}.meta
# Test database connection
psql -c "SELECT version();"En la mayoría de los escenarios de recuperación, restaura en una base de datos vacía para asegurarte de que se eliminen los datos obsoletos o en conflicto.
Este paso elimina permanentemente el contenido actual de la base de datos.
psql -c "DROP DATABASE IF EXISTS bob;"
psql -c "CREATE DATABASE bob;"Restaura la base de datos cargando el contenido del backup en PostgreSQL:
# Extract and restore backup
gunzip -c $BACKUP_FILE | psql -d bob
# This may take several minutes depending on backup sizeAntes de devolver la aplicación al servicio, verifica que la restauración se haya completado correctamente:
# Connect to restored database
psql -d bob
# Verify tables exist
\dt
# Check row counts for key tables
SELECT COUNT(*) FROM users;
SELECT COUNT(*) FROM projects;
SELECT COUNT(*) FROM conversations;
# Verify recent data
SELECT * FROM users ORDER BY created_at DESC LIMIT 10;
# Exit psql
\qUna vez completada la validación de la base de datos correctamente, reinicia los servicios de IBM Bob y permite que se reconecten a la base de datos restaurada. Supervisa los logs de inicio de la aplicación en busca de errores o fallos de migración.
# Exit restore pod
exit
# Scale up Bob services
oc scale deployment bob-admin-service --replicas=1 -n <bob-instance-namespace>
oc scale deployment bob-api-service --replicas=3 -n <bob-instance-namespace>
oc scale deployment bob-ui-service --replicas=2 -n <bob-instance-namespace>
# Verify pods are running
oc get pods -n <bob-instance-namespace> -l app.kubernetes.io/name=bob
# Check application logs
oc logs -n <bob-instance-namespace> -l app.kubernetes.io/name=bob --tail=50Completa una validación de la aplicación de extremo a extremo antes de permitir que los usuarios se reconecten:
# Test application endpoints
curl -k https://bob.example.com/health
# Verify user login works
# Verify data access works
# Verify key functionality worksUna validación exitosa indica que el proceso de restauración ha finalizado.
Buenas prácticas
- Prueba siempre en un entorno que no sea de producción primero.
- Crea un backup previo a la restauración del estado actual de la base de datos antes de comenzar.
- Verifica la integridad del backup antes de empezar.
- Planifica el tiempo de inactividad y comunícalo a los usuarios.
- Documenta el proceso de restauración y los resultados.
- Verifica la integridad de los datos después de la restauración.
- Supervisa la aplicación de cerca después de la restauración.
Problemas comunes de restauración
| Problema | Causa | Solución |
|---|---|---|
| Espacio insuficiente | No hay suficiente espacio en disco para la operación de restauración | Amplía el PVC o libera espacio de almacenamiento antes de restaurar. |
| Tiempo de espera de conexión | Problemas de conectividad de red o de disponibilidad de la base de datos | Verifica la conectividad de la base de datos y aumenta los valores de tiempo de espera si es necesario. |
| Errores de permisos | El usuario de restauración no tiene los privilegios de base de datos requeridos | Concede los permisos necesarios al usuario de restauración antes de ejecutar la operación de restauración. |