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.
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 metadataKonfirmasi 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.gzProsedur 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=bobBuat 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.
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 backupSebelum 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
\qSetelah 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=50Selesaikan 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 berfungsiValidasi 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
| Masalah | Penyebab | Solusi |
|---|---|---|
| Kapasitas penyimpanan tidak cukup | Ruang disk tidak cukup untuk operasi pemulihan | Perluas PVC atau bebaskan ruang penyimpanan sebelum memulihkan. |
| Timeout koneksi | Masalah konektivitas jaringan atau ketersediaan database | Verifikasi konektivitas database dan tingkatkan nilai timeout jika perlu. |
| Error izin | Pengguna pemulihan tidak memiliki hak database yang diperlukan | Berikan izin yang diperlukan kepada pengguna pemulihan sebelum menjalankan operasi pemulihan. |