استعادة نسخة احتياطية
استعد قواعد بيانات IBM Bob لـ PostgreSQL من نسخة احتياطية للتعافي من فقدان البيانات أو ترحيل البيئات أو العودة إلى حالة معروفة صحيحة.
استخدم هذا الإجراء لاستعادة قواعد بيانات IBM Bob وقواعد البيانات المرتبطة بـ PostgreSQL من ملفات النسخ الاحتياطية. تشمل عملية الاستعادة التحقق من سلامة النسخة الاحتياطية وتجهيز البيئة وإعادة إنشاء قاعدة البيانات المستهدفة واستعادة محتويات النسخة الاحتياطية والتحقق من البيانات المستعادة قبل إعادة خدمات التطبيق إلى العمل.
تؤدي استعادة قاعدة البيانات إلى استبدال محتويات قاعدة البيانات الحالية بالبيانات من ملف النسخة الاحتياطية المحدد. يجب إيقاف خدمات التطبيق قبل البدء، إذ يمكن لعمليات الكتابة النشطة في قاعدة البيانات أن تُفسد عملية الاستعادة. اختبر دائمًا إجراءات الاستعادة في بيئة غير إنتاجية قبل إجراء استرداد في بيئة الإنتاج.
قبل البدء
قبل استعادة قاعدة البيانات، تحقق مما يلي:
التحقق من سلامة النسخة الاحتياطية
# 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 metadataتأكيد تفاصيل النسخة الاحتياطية
- الطابع الزمني للنسخة الاحتياطية يتطابق مع نقطة الاستعادة المتوقعة.
- اسم قاعدة البيانات صحيح.
- حجم النسخة الاحتياطية منطقي.
- ملف بيانات الوصف موجود وقابل للقراءة.
إنشاء نسخة احتياطية قبل الاستعادة
قبل الاستعادة، انسخ احتياطيًا حالة قاعدة البيانات الحالية:
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إجراء الاستعادة
أوقف جميع خدمات تطبيق IBM Bob لمنع الكتابة في قاعدة البيانات أثناء الاستعادة.
# 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=bobأنشئ pod استعادة مؤقتًا يملك وصولًا إلى كل من قاعدة بيانات PostgreSQL وموقع تخزين النسخ الاحتياطية.
# 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"
}
}]
}
}'داخل pod الاستعادة، تحقق من ملف النسخة الاحتياطية واختبر الاتصال بقاعدة البيانات:
# 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();"في معظم سيناريوهات الاسترداد، استعد إلى قاعدة بيانات فارغة لضمان إزالة البيانات القديمة أو المتعارضة.
تُزيل هذه الخطوة محتويات قاعدة البيانات الحالية بشكل دائم.
psql -c "DROP DATABASE IF EXISTS bob;"
psql -c "CREATE DATABASE bob;"استعد قاعدة البيانات بتحميل محتويات النسخة الاحتياطية في PostgreSQL:
# Extract and restore backup
gunzip -c $BACKUP_FILE | psql -d bob
# This may take several minutes depending on backup sizeقبل إعادة التطبيق إلى الخدمة، تحقق من اكتمال الاستعادة بنجاح:
# 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
\qبعد اكتمال التحقق من قاعدة البيانات بنجاح، أعد تشغيل خدمات IBM Bob واسمح لها بإعادة الاتصال بقاعدة البيانات المستعادة. راقب سجلات بدء تشغيل التطبيق بحثًا عن أخطاء أو فشل في الترحيل.
# 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=50أجرِ تحققًا شاملًا من التطبيق قبل السماح للمستخدمين بإعادة الاتصال:
# Test application endpoints
curl -k https://bob.example.com/health
# Verify user login works
# Verify data access works
# Verify key functionality worksيشير التحقق الناجح إلى اكتمال عملية الاستعادة.
أفضل الممارسات
- اختبر دائمًا في بيئة غير إنتاجية أولًا.
- أنشئ نسخة احتياطية لحالة قاعدة البيانات الحالية قبل البدء.
- تحقق من سلامة النسخة الاحتياطية قبل الشروع في الاستعادة.
- خطّط للتوقف عن العمل وأبلغ المستخدمين.
- وثّق عملية الاستعادة ونتائجها.
- تحقق من سلامة البيانات بعد الاستعادة.
- راقب التطبيق عن كثب بعد الاستعادة.
مشكلات الاستعادة الشائعة
| المشكلة | السبب | الحل |
|---|---|---|
| مساحة غير كافية | مساحة القرص غير كافية لعملية الاستعادة | وسّع PVC أو حرّر مساحة تخزين قبل الاستعادة. |
| انتهاء مهلة الاتصال | مشكلات في الاتصال الشبكي أو في توافر قاعدة البيانات | تحقق من اتصال قاعدة البيانات وزد قيم المهلة إذا لزم الأمر. |
| أخطاء الأذونات | مستخدم الاستعادة لا يملك صلاحيات قاعدة البيانات المطلوبة | امنح الصلاحيات اللازمة لمستخدم الاستعادة قبل تشغيل عملية الاستعادة. |