Memulihkan backup

Pulihkan database PostgreSQL IBM Bob dari backup untuk mengatasi kehilangan data, memigrasikan lingkungan, atau kembali ke kondisi yang diketahui baik.

Gunakan prosedur ini untuk memulihkan database IBM Bob dan database PostgreSQL terkait dari file backup. Proses pemulihan mencakup validasi integritas backup, persiapan lingkungan, pembuatan ulang database target, pemulihan konten backup, dan verifikasi data yang dipulihkan sebelum mengembalikan layanan aplikasi ke operasi.

Peringatan:

Memulihkan database menggantikan konten database yang ada dengan data dari file backup yang dipilih. Layanan aplikasi harus dihentikan sebelum memulai, karena penulisan database aktif dapat merusak proses pemulihan. Selalu uji prosedur pemulihan di lingkungan non-produksi sebelum melakukan pemulihan produksi.

Sebelum kamu mulai

Sebelum memulihkan database, verifikasi hal berikut:

Verifikasi integritas backup

# Akses PVC backup
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"
        }
      }]
    }
  }'

# Di dalam pod:
cd /backups/bob-db
gunzip -t backup_bob_20260902_020000.sql.gz  # Uji integritas gzip
cat backup_bob_20260902_020000.sql.gz.meta   # Periksa metadata

Konfirmasi detail backup

  • Timestamp backup sesuai dengan titik pemulihan yang diharapkan.
  • Nama database sudah benar.
  • Ukuran backup tampak wajar.
  • File metadata ada dan dapat dibaca.

Buat backup pra-pemulihan

Sebelum memulihkan, backup kondisi database saat ini:

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.gz

Prosedur pemulihan

Hentikan semua layanan aplikasi IBM Bob untuk mencegah penulisan database selama pemulihan.

# Scale down layanan Bob
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>

# Verifikasi pod telah dihentikan
oc get pods -n <bob-instance-namespace> -l app.kubernetes.io/name=bob

Buat pod pemulihan sementara yang memiliki akses ke database PostgreSQL maupun lokasi penyimpanan backup.

# Dapatkan image PostgreSQL
POSTGRES_IMAGE=$(oc get cluster bob-db -n <bob-instance-namespace> -o jsonpath='{.spec.imageName}')

# Buat pod pemulihan
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"
        }
      }]
    }
  }'

Di dalam pod pemulihan, verifikasi file backup dan uji koneksi database:

# Daftar backup yang tersedia
ls -lh /backups/bob-db/

# Verifikasi file backup
BACKUP_FILE="/backups/bob-db/backup_bob_20260902_020000.sql.gz"
gunzip -t $BACKUP_FILE
echo "File backup valid"

# Periksa metadata
cat ${BACKUP_FILE}.meta

# Uji koneksi database
psql -c "SELECT version();"

Untuk sebagian besar skenario pemulihan, pulihkan ke database kosong untuk memastikan data yang sudah usang atau saling bertentangan dihapus.

Peringatan:

Langkah ini menghapus konten database saat ini secara permanen.

psql -c "DROP DATABASE IF EXISTS bob;"
psql -c "CREATE DATABASE bob;"

Pulihkan database dengan memuat konten backup ke PostgreSQL:

# Ekstrak dan pulihkan backup
gunzip -c $BACKUP_FILE | psql -d bob

# Proses ini mungkin memerlukan beberapa menit tergantung ukuran backup

Sebelum mengembalikan aplikasi ke operasi, verifikasi bahwa pemulihan berhasil diselesaikan:

# Sambungkan ke database yang dipulihkan
psql -d bob

# Verifikasi tabel ada
\dt

# Periksa jumlah baris untuk tabel utama
SELECT COUNT(*) FROM users;
SELECT COUNT(*) FROM projects;
SELECT COUNT(*) FROM conversations;

# Verifikasi data terbaru
SELECT * FROM users ORDER BY created_at DESC LIMIT 10;

# Keluar dari psql
\q

Setelah validasi database berhasil diselesaikan, restart layanan IBM Bob dan biarkan mereka terhubung kembali ke database yang dipulihkan. Pantau log startup aplikasi untuk error atau kegagalan migrasi.

# Keluar dari pod pemulihan
exit

# Scale up layanan Bob
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>

# Verifikasi pod berjalan
oc get pods -n <bob-instance-namespace> -l app.kubernetes.io/name=bob

# Periksa log aplikasi
oc logs -n <bob-instance-namespace> -l app.kubernetes.io/name=bob --tail=50

Selesaikan validasi aplikasi end-to-end sebelum mengizinkan pengguna untuk terhubung kembali:

# Uji endpoint aplikasi
curl -k https://bob.example.com/health

# Verifikasi login pengguna berfungsi
# Verifikasi akses data berfungsi
# Verifikasi fungsionalitas utama berfungsi

Validasi yang berhasil menunjukkan bahwa proses pemulihan telah selesai.

Praktik terbaik

  • Selalu uji terlebih dahulu di lingkungan non-produksi.
  • Buat backup pra-pemulihan dari kondisi database saat ini sebelum memulai.
  • Verifikasi integritas backup sebelum memulai.
  • Rencanakan downtime dan komunikasikan kepada pengguna.
  • Dokumentasikan proses dan hasil pemulihan.
  • Verifikasi integritas data setelah pemulihan.
  • Pantau aplikasi dengan cermat setelah pemulihan.

Masalah pemulihan yang umum

MasalahPenyebabSolusi
Kapasitas penyimpanan tidak cukupRuang disk tidak cukup untuk operasi pemulihanPerluas PVC atau bebaskan ruang penyimpanan sebelum memulihkan.
Timeout koneksiMasalah konektivitas jaringan atau ketersediaan databaseVerifikasi konektivitas database dan tingkatkan nilai timeout jika perlu.
Error izinPengguna pemulihan tidak memiliki hak database yang diperlukanBerikan izin yang diperlukan kepada pengguna pemulihan sebelum menjalankan operasi pemulihan.
Bagaimana topik ini?