Vai al contenuto principale
Versione: 3.0.0-alpha (Diátaxis)

Come ripristinare un backup (PITR)

Questa guida spiega come ripristinare un database PostgreSQL a un istante preciso grazie al meccanismo di Point-In-Time Recovery (PITR) integrato in Hikube.

avviso

Il ripristino PITR crea una nuova istanza PostgreSQL con un nome diverso. Non ripristina l'istanza esistente sul posto. La vecchia istanza non viene modificata.

Prerequisiti

  • kubectl configurato con il vostro kubeconfig Hikube
  • Un'istanza PostgreSQL originale con i backup attivati (backup.enabled: true)
  • I backup devono essere stati correttamente inviati al bucket S3
  • Il nome della vecchia istanza PostgreSQL (bootstrap.oldName)
  • (Opzionale) Un timestamp RFC 3339 per il ripristino a un istante preciso

Passaggi

1. Identificare il punto di ripristino

Determinate l'istante al quale desiderate ripristinare i vostri dati. Il timestamp deve essere nel formato RFC 3339:

YYYY-MM-DDTHH:MM:SSZ

Esempi:

TimestampDescrizione
2025-06-15T10:30:00Z15 giugno 2025 alle 10:30 UTC
2025-06-15T14:00:00+02:0015 giugno 2025 alle 14:00 (ora di Parigi)
(vuoto)Ripristino all'ultimo stato disponibile
suggerimento

Se lasciate recoveryTime vuoto, il ripristino viene effettuato fino all'ultimo WAL disponibile, cioe lo stato più recente possibile.

2. Preparare il manifesto della nuova istanza

Create un manifesto per la nuova istanza PostgreSQL. Il nome deve essere diverso dall'istanza originale. La configurazione (replicas, resources, archiviazione) deve essere identica a quella dell'istanza originale.

Aggiungete la sezione bootstrap per attivare il ripristino:

postgresql-restored.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: Postgres
metadata:
name: my-database-restored
spec:
replicas: 3
resourcesPreset: medium
size: 20Gi

users:
admin:
password: SecureAdminPassword

databases:
myapp:
roles:
admin:
- admin

backup:
enabled: true
schedule: "0 2 * * *"
retentionPolicy: 30d
destinationPath: s3://backups/postgresql/my-database-restored/
endpointURL: https://prod.s3.hikube.cloud
s3AccessKey: oobaiRus9pah8PhohL1ThaeTa4UVa7gu
s3SecretKey: ju3eum4dekeich9ahM1te8waeGai0oog

bootstrap:
enabled: true
oldName: "my-database"
recoveryTime: "2025-06-15T10:30:00Z"

Parametri chiave della sezione bootstrap:

ParametroDescrizioneRichiesto
bootstrap.enabledAttiva il ripristino da un backupSi
bootstrap.oldNameNome della vecchia istanza PostgreSQLSi
bootstrap.recoveryTimeTimestamp RFC 3339 del punto di ripristino. Vuoto = ultimo stato disponibileNo
nota

Il campo bootstrap.oldName corrisponde al metadata.name dell'istanza originale. In questo esempio, la vecchia istanza si chiamava my-database.

3. Applicare il manifesto

kubectl apply -f postgresql-restored.yaml

La creazione della nuova istanza e il ripristino possono richiedere diversi minuti a seconda del volume di dati.

4. Verificare il ripristino

Monitorate lo stato della nuova istanza:

kubectl get postgres my-database-restored

Risultato atteso:

NAME                      READY   AGE     VERSION
my-database-restored True 3m12s 0.18.0

Verificate che i pod siano nello stato Running:

kubectl get po | grep postgres-my-database-restored

Risultato atteso:

postgres-my-database-restored-1   1/1     Running   0   3m
postgres-my-database-restored-2 1/1 Running 0 2m
postgres-my-database-restored-3 1/1 Running 0 1m

5. Validare i dati ripristinati

Recuperate le credenziali di connessione della nuova istanza:

kubectl get secret postgres-my-database-restored-credentials -o json | jq -r '.data | to_entries[] | "\(.key): \(.value|@base64d)"'

Connettetevi al database e verificate che i dati siano presenti:

kubectl port-forward svc/postgres-my-database-restored-rw 5432:5432
psql -h 127.0.0.1 -U admin myapp
-- Verificare le tabelle e i dati
\dt
SELECT count(*) FROM votre_table;

Verifica

Il ripristino ha avuto successo se:

  • L'istanza my-database-restored e nello stato READY: True
  • I pod PostgreSQL sono tutti nello stato Running
  • I dati sono presenti e coerenti al timestamp richiesto
  • La connessione psql funziona correttamente
suggerimento

Una volta validato il ripristino, ricordatevi di aggiornare le vostre applicazioni per puntare alla nuova istanza (postgres-my-database-restored-rw al posto di postgres-my-database-rw).

Per approfondire