Restaurando um backup
Restaure bancos de dados PostgreSQL do IBM Bob a partir de um backup para recuperar-se de perda de dados, migrar ambientes ou retornar a um estado conhecido e funcional.
Use este procedimento para restaurar o IBM Bob e os bancos de dados PostgreSQL relacionados a partir de arquivos de backup. O processo de restauração inclui validar a integridade do backup, preparar o ambiente, recriar o banco de dados de destino, restaurar o conteúdo do backup e verificar os dados restaurados antes de retornar os serviços da aplicação ao funcionamento.
Restaurar um banco de dados substitui o conteúdo existente do banco de dados pelos dados do arquivo de backup selecionado. Os serviços da aplicação devem ser interrompidos antes de começar, pois escritas ativas no banco de dados podem corromper o processo de restauração. Sempre teste os procedimentos de restauração em um ambiente que não seja de produção antes de realizar uma recuperação em produção.
Antes de começar
Antes de restaurar um banco de dados, verifique o seguinte:
Verificar a integridade do 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 os detalhes do backup
- O timestamp do backup corresponde ao ponto de restauração esperado.
- O nome do banco de dados está correto.
- O tamanho do backup é razoável.
- O arquivo de metadados existe e é legível.
Criar um backup pré-restauração
Antes de restaurar, faça um backup do estado atual do banco de dados:
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.gzProcedimento de restauração
Interrompa todos os serviços da aplicação IBM Bob para evitar escritas no banco de dados durante a restauração.
# 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=bobCrie um pod de restauração temporário que tenha acesso tanto ao banco de dados PostgreSQL quanto ao local de armazenamento do 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 do pod de restauração, verifique o arquivo de backup e teste a conexão com o banco de dados:
# 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();"Para a maioria dos cenários de recuperação, restaure em um banco de dados vazio para garantir que dados obsoletos ou conflitantes sejam removidos.
Esta etapa remove permanentemente o conteúdo atual do banco de dados.
psql -c "DROP DATABASE IF EXISTS bob;"
psql -c "CREATE DATABASE bob;"Restaure o banco de dados carregando o conteúdo do backup no PostgreSQL:
# Extract and restore backup
gunzip -c $BACKUP_FILE | psql -d bob
# This may take several minutes depending on backup sizeAntes de retornar a aplicação ao serviço, verifique se a restauração foi concluída com sucesso:
# 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
\qApós a conclusão bem-sucedida da validação do banco de dados, reinicie os serviços do IBM Bob e permita que eles se reconectem ao banco de dados restaurado. Monitore os logs de inicialização da aplicação em busca de erros ou falhas de migração.
# 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=50Realize uma validação completa da aplicação antes de permitir que os usuários se reconectem:
# Test application endpoints
curl -k https://bob.example.com/health
# Verify user login works
# Verify data access works
# Verify key functionality worksUma validação bem-sucedida indica que o processo de restauração está completo.
Boas práticas
- Sempre teste em um ambiente que não seja de produção primeiro.
- Crie um backup pré-restauração do estado atual do banco de dados antes de começar.
- Verifique a integridade do backup antes de iniciar.
- Planeje o tempo de inatividade e comunique aos usuários.
- Documente o processo e os resultados da restauração.
- Verifique a integridade dos dados após a restauração.
- Monitore a aplicação de perto após a restauração.
Problemas comuns de restauração
| Problema | Causa | Solução |
|---|---|---|
| Espaço insuficiente | Espaço em disco insuficiente para a operação de restauração | Expanda o PVC ou libere espaço de armazenamento antes de restaurar. |
| Timeout de conexão | Problemas de conectividade de rede ou de disponibilidade do banco de dados | Verifique a conectividade do banco de dados e aumente os valores de timeout se necessário. |
| Erros de permissão | O usuário de restauração não tem os privilégios de banco de dados necessários | Conceda as permissões necessárias ao usuário de restauração antes de executar a operação de restauração. |