Yedekten geri yükleme

Veri kaybından kurtulmak, ortamları taşımak veya bilinen iyi bir duruma dönmek için IBM Bob PostgreSQL veritabanlarını bir yedekten geri yükleyin.

IBM Bob ve ilgili PostgreSQL veritabanlarını yedekleme dosyalarından geri yüklemek için bu prosedürü kullanın. Geri yükleme süreci; yedekleme bütünlüğünün doğrulanmasını, ortamın hazırlanmasını, hedef veritabanının yeniden oluşturulmasını, yedekleme içeriğinin geri yüklenmesini ve uygulama servislerini yeniden hizmete almadan önce geri yüklenen verilerin doğrulanmasını içerir.

Uyarı:

Bir veritabanını geri yüklemek, mevcut veritabanı içeriğini seçilen yedekleme dosyasındaki verilerle değiştirir. Etkin veritabanı yazma işlemleri geri yükleme sürecini bozabileceğinden, başlamadan önce uygulama servisleri durdurulmalıdır. Üretim ortamında kurtarma işlemi yapmadan önce geri yükleme prosedürlerini her zaman üretim dışı bir ortamda test edin.

Başlamadan önce

Bir veritabanını geri yüklemeden önce aşağıdakileri doğrulayın:

Yedekleme bütünlüğünü doğrulayın

# Yedekleme PVC'sine erişin
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"
        }
      }]
    }
  }'

# Pod içinde:
cd /backups/bob-db
gunzip -t backup_bob_20260902_020000.sql.gz  # gzip bütünlüğünü test edin
cat backup_bob_20260902_020000.sql.gz.meta   # Meta verileri kontrol edin

Yedekleme ayrıntılarını onaylayın

  • Yedekleme zaman damgası beklenen geri yükleme noktasıyla eşleşiyor.
  • Veritabanı adı doğru.
  • Yedekleme boyutu makul.
  • Meta veri dosyası mevcut ve okunabilir.

Geri yükleme öncesi yedek oluşturun

Geri yüklemeden önce mevcut veritabanı durumunu yedekleyin:

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

Geri yükleme prosedürü

Geri yükleme sırasında veritabanına yazılmasını önlemek için tüm IBM Bob uygulama servislerini durdurun.

# Bob servislerini küçültün (scale down)
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>

# Pod'ların sonlandırıldığını doğrulayın
oc get pods -n <bob-instance-namespace> -l app.kubernetes.io/name=bob

Hem PostgreSQL veritabanına hem de yedekleme depolama konumuna erişimi olan geçici bir geri yükleme pod'u oluşturun.

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

# Geri yükleme pod'u oluşturun
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"
        }
      }]
    }
  }'

Geri yükleme pod'unun içinde, yedekleme dosyasını doğrulayın ve veritabanı bağlantısını test edin:

# Kullanılabilir yedekleri listeleyin
ls -lh /backups/bob-db/

# Yedekleme dosyasını doğrulayın
BACKUP_FILE="/backups/bob-db/backup_bob_20260902_020000.sql.gz"
gunzip -t $BACKUP_FILE
echo "Backup file is valid"

# Meta verileri kontrol edin
cat ${BACKUP_FILE}.meta

# Veritabanı bağlantısını test edin
psql -c "SELECT version();"

Çoğu kurtarma senaryosunda, eski veya çakışan verilerin kaldırıldığından emin olmak için boş bir veritabanına geri yükleyin.

Uyarı:

Bu adım mevcut veritabanı içeriğini kalıcı olarak siler.

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

Yedekleme içeriğini PostgreSQL'e yükleyerek veritabanını geri yükleyin:

# Yedeklemeyi açın ve geri yükleyin
gunzip -c $BACKUP_FILE | psql -d bob

# Yedekleme boyutuna bağlı olarak bu işlem birkaç dakika sürebilir

Uygulamayı yeniden hizmete almadan önce, geri yüklemenin başarıyla tamamlandığını doğrulayın:

# Geri yüklenen veritabanına bağlanın
psql -d bob

# Tabloların mevcut olduğunu doğrulayın
\dt

# Önemli tablolar için satır sayılarını kontrol edin
SELECT COUNT(*) FROM users;
SELECT COUNT(*) FROM projects;
SELECT COUNT(*) FROM conversations;

# Yakın tarihli verileri doğrulayın
SELECT * FROM users ORDER BY created_at DESC LIMIT 10;

# psql'den çıkın
\q

Veritabanı doğrulaması başarıyla tamamlandıktan sonra, IBM Bob servislerini yeniden başlatın ve geri yüklenen veritabanına yeniden bağlanmalarına izin verin. Hatalar veya geçiş (migration) başarısızlıkları için uygulama başlangıç loglarını izleyin.

# Geri yükleme pod'undan çıkın
exit

# Bob servislerini büyütün (scale up)
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>

# Pod'ların çalıştığını doğrulayın
oc get pods -n <bob-instance-namespace> -l app.kubernetes.io/name=bob

# Uygulama loglarını kontrol edin
oc logs -n <bob-instance-namespace> -l app.kubernetes.io/name=bob --tail=50

Kullanıcıların yeniden bağlanmasına izin vermeden önce uçtan uca uygulama doğrulamasını tamamlayın:

# Uygulama endpoint'lerini test edin
curl -k https://bob.example.com/health

# Kullanıcı girişinin çalıştığını doğrulayın
# Veri erişiminin çalıştığını doğrulayın
# Temel işlevlerin çalıştığını doğrulayın

Başarılı doğrulama, geri yükleme işleminin tamamlandığını gösterir.

En iyi uygulamalar

  • Her zaman önce üretim dışı bir ortamda test edin.
  • Başlamadan önce mevcut veritabanı durumunun geri yükleme öncesi bir yedeğini oluşturun.
  • Başlamadan önce yedekleme bütünlüğünü doğrulayın.
  • Kesinti süresini planlayın ve kullanıcılarla iletişim kurun.
  • Geri yükleme sürecini ve sonuçlarını belgeleyin.
  • Geri yüklemeden sonra veri bütünlüğünü doğrulayın.
  • Geri yükleme sonrasında uygulamayı yakından izleyin.

Sık karşılaşılan geri yükleme sorunları

SorunNedenÇözüm
Yetersiz alanGeri yükleme işlemi için yeterli disk alanı yokGeri yüklemeden önce PVC'yi genişletin veya depolama alanı açın.
Bağlantı zaman aşımıAğ bağlantısı sorunları veya veritabanı kullanılabilirlik sorunlarıVeritabanı bağlantısını doğrulayın ve gerekirse zaman aşımı değerlerini artırın.
İzin hatalarıGeri yükleme kullanıcısı gerekli veritabanı ayrıcalıklarına sahip değilGeri yükleme işlemini çalıştırmadan önce geri yükleme kullanıcısına gerekli izinleri verin.
Bu konu nasıl?