لە جیهانی پڕ لە مەترسی بەڕێوەبردنی بنکەدراوەکان و ئەندازیاری متمانەپێکراوی ماڵپەڕەکاندا، یاسایەکی ناسراو هەیە: پشتیوانی شڕۆدینگەر (Schrödinger’s Backup). دۆخی هەر پشتیوانییەک (backup) نادیارە تا ئەو کاتەی هەوڵ دەدەیت بیگەڕێنیتەوە. تا ئەو ساتە، لە دۆخێکی کوانتەمیدا دەژی کە هەم بەتەواوی کارا و هەم بەتەواوی تێکچووە.
بۆ ئەندازیارانی DevOps و بەڕێوەبەرانی بنکەدراوە (DBAs)، دۆزینەوەی ئەوەی کە پشتیوانییەکی گرنگی بنکەدراوە لە کاتی ڕووداوێکی چالاکدا تێکچووە، خراپترین سیناریۆی خەیاڵییە. ئەمە کردەیەکی ئاسایی گەڕاندنەوە دەگۆڕێت بۆ کارەساتێکی لەدەستدانی داتا. ئەم “بکوژە بێدەنگە”ی دڵنیایی داتا زۆرجار بەبێ تێبینی دەمێنێتەوە، چونکە کارەکانی پشتیوانی زۆرجار ڕاپۆرتی سەرکەوتنی Exit Code 0 دەدەن، تەنانەت کاتێک ناوەڕۆکەکەی تێکچووە.
لەو ڕێبەرە تێر و تەسەلەدا، ئێمە وردەکارییەکانی تێکچوونی پشتیوانی شیدەکەینەوە، تەکنیکەکانی پشتڕاستکردنەوەی تایبەت بە بنکەدراوەکان دەخەینە ڕوو، و نیشان دەدەین چۆن بۆرییەکی (pipeline) خۆکار و بەهێز بۆ گەڕاندنەوەی داتا لە ژینگەی بەرهەمهێناندا دروست بکەین.
پێکهاتەی تێکچوونی پشتیوانی
بۆ دۆزینەوەی تێکچوون، سەرەتا دەبێت بزانیت چۆن ڕوودەدات. تێکچوونی پشتیوانی بەگشتی دەکەوێتە دوو بەشەوە: فیزیکی (ئاستی ژێرخان) و لۆژیکی (ئاستی ئەپڵیکەیشن).
تێکچوونی فیزیکی
تێکچوونی فیزیکی کاتێک ڕوودەدات کە بیتە ڕاستەقینەکانی سەر میدیای هەڵگرتن دەگۆڕێن. ئەمە دەکرێت لە کاتی خوێندنەوە لە دیسکی سەرچاوە، لە کاتی گواستنەوەی تۆڕ، یان لە کاتی مانەوە لەسەر هەڵگرتنی ئامانج ڕووبدات.
* پوکانەوەی بیت (Bit Rot): داخورانی وردەوردەی میدیای هەڵگرتن دەکرێت بیتەکان بە بێدەنگی بگۆڕێت.
* هەڵەکانی گواستنەوە: هەرچەندە TCP خاوەنی checksumـە، بەڵام ئەوانە زۆر لاوازن (16-bit). ژینگەکانی خێرایی بەرز دەکرێت تووشی تێکچوونی بێدەنگی داتا ببن لەسەر وایەرەکە کە TCP ناتوانێت پێی بزانێت.
* کێشەی کۆنترۆڵکەری هەڵگرتن: هەڵەی ڕەقەکاڵا لە کۆنترۆڵکەرەکانی RAID یان فابریكەکانی SAN دەکرێت داتای پاشماوە بنووسن لە کاتێکدا سەرکەوتن بە سیستەمی کارپێکردن ڕادەگەیەنن.
تێکچوونی لۆژیکی
تێکچوونی لۆژیکی دەکرێت بگوترێت مەترسیدارترە چونکە فایلەکەی پشتیوانی خۆی بەتەواوی ساغە، بەڵام داتای ناوەوەی تێکچووە.
* پاشماوە لە ژوورەوە، پاشماوە لە دەرەوە (GIGO): ئەگەر بنکەدراوەکەت ئیندێکسێکی تێکچوو یان پەڕەیەکی دڕاوی هەبێت، ئامێری پشتیوانییەکەت ڕەنگە بە دڵسۆزی ئەو پەڕە تێکچووە کۆپی بکات. کاری پشتیوانییەکە سەرکەوتوو دەبێت، بەڵام گەڕاندنەوەکە شکست دەهێنێت یان بنکەدراوەیەکی تێکچوو بەرهەم دەهێنێت.
* مامەڵە تەواونەکراوەکان: وێنەگرتنی ئاستی سیستەمی فایل بەبێ بەستنی دروستی I/Oـی بنکەدراوە (بۆ نموونە، بەکارنەهێنانی FLUSH TABLES WITH READ LOCK لە MySQL) دەبێتە هۆی پەڕەی دڕاو و دۆخی نەگەڕاوە.
دۆزینەوەی پێشوەختە: Checksums و Hashingـی کریپتۆگرافی
یەکەم هێڵی بەرگری دژی تێکچوونی فیزیکی، پشتڕاستکردنەوەی کریپتۆگرافییە. پشت بەستن بە قەبارەی فایل یان بەرواری دەستکاریکردن بەس نییە.
چالاککردنی Checksumـی ئاستی بنکەدراوە
سیستەمە مۆدێرنەکانی بەڕێوەبردنی بنکەدراوەی پەیوەندیی (RDBMS) پشتگیری لە checksumـی ئاستی پەڕە دەکەن. کاتێک چالاک دەکرێت، بنکەدراوەکە checksumـێک بۆ هەر پەڕەیەک حیساب دەکات پێش ئەوەی بینووسێتە سەر دیسک. کاتێک پەڕەکە دەخوێنرێتەوە (بە پرسیارێک یان پرۆسەی پشتیوانی)، checksumـەکە پشتڕاست دەکرێتەوە.
بۆ PostgreSQL، دەتوانیت checksumـی داتا لە کاتی دەستپێکردنی کۆمەڵە (cluster) چالاک بکەیت:
# Initialize a new PostgreSQL cluster with checksums enabled
initdb --data-checksums -D /var/lib/postgresql/data
تێبینی: ئەگەر کۆمەڵەیەکی PostgreSQLـی ئێستات هەیە، دەتوانیت ئامێری pg_checksums بەکاربهێنیت بۆ چالاککردنیان بەشێوەی ئۆفلاین.
بۆ Microsoft SQL Server، دڵنیابە کە PAGE_VERIFY دانراوە لەسەر CHECKSUM (کە لە وەشانە مۆدێرنەکاندا بەشێوەی بنەڕەتی وایە، بەڵام باشە لە سیستەمە کۆنەکاندا پشتڕاست بکرێتەوە):
ALTER DATABASE [ProductionDB] SET PAGE_VERIFY CHECKSUM;
GO
پشتڕاستکردنەوەی پشتیوانییەکان لە کاتی مانەوە
کاتێک پشتیوانییەکە دەگاتە ئامانجی هەڵگرتنەکەت، دەبێت دڵنیاییەکەی بە شێوەی کریپتۆگرافی پشتڕاست بکرێتەوە. پلاتفۆرمەکانی پشتیوانی بزنس وەک CloudSave بەشێوەی خۆکار حیساب و پشتڕاستکردنەوەی SHA-256 hashـی بلۆکەکانی پشتیوانی دەکەن لە کاتی گواستنەوە و مانەوە. ئەگەر سکریپتی تایبەت بەکاردەهێنیت، دەبێت ئەمە بە دەستی جێبەجێ بکەیت:
# Generate SHA-256 hash after backup creation
sha256sum prod_db_backup.tar.gz > prod_db_backup.tar.gz.sha256
# Verify the hash on the storage server
sha256sum -c prod_db_backup.tar.gz.sha256
تەکنیکەکانی پشتڕاستکردنەوەی تایبەت بە بنکەدراوە
مەکینە جیاوازەکانی بنکەدراوە ئامێری ناوخۆیی پێشکەش دەکەن بۆ پشتڕاستکردنەوەی دڵنیایی ئارتێفاکتەکانی پشتیوانییان.
PostgreSQL: pg_verifybackup
کە لە PostgreSQL 13 ناسێندرا، pg_verifybackup گۆڕانکارییەکی گەورەیە بۆ پشتیوانییە فیزیکییەکان کە بە pg_basebackup گیراون. فایلەکەی backup_manifest کە لە کاتی پشتیوانییەکەدا دروست بووە دەخوێنێتەوە و پشتڕاستی دەکاتەوە کە هەموو فایلەکان بوونیان هەیە و checksumـەکانیان یەک دەگرنەوە.
# Run verification against a physical base backup directory
pg_verifybackup /mnt/backups/postgres/base_backup_20231025/
ئەگەر تەنها بیتێک لە هەر فایلێکی داتاکەدا گۆڕابێت، pg_verifybackup هەڵەیەکی کوشندە دەردەکات، کە ڕێگە بە سیستەمەکانی چاودێریکردنت دەدات دەستبەجێ تیمەکەی DBA ئاگادار بکەنەوە.
Microsoft SQL Server: RESTORE VERIFYONLY
SQL Server فەرمانێکی ناوخۆیی پێشکەش دەکات بۆ پشتڕاستکردنەوەی دڵنیایی فیزیکی فایلێکی پشتیوانی بەبێ ئەوەی بە کردەیی بیگەڕێنێتەوە. سەری پشتیوانییەکە دەپشکنێت و checksumـی پەڕەکان پشتڕاست دەکاتەوە (ئەگەر لە کاتی پشتیوانییەکەدا چالاک کرابن).
RESTORE VERIFYONLY
FROM DISK = 'Z:BackupsProdDB_Full.bak'
WITH CHECKSUM;
ئاگاداری: RESTORE VERIFYONLY تەنها پشتڕاستی ئەوە دەکاتەوە کە فایلەکەی پشتیوانی دەخوێنرێتەوە و checksumـە فیزیکییەکان یەک دەگرنەوە. ئەمە دڵنیایی نادات لە دڵنیایی لۆژیکی. بۆ دڵنیابوون لە دڵنیایی لۆژیکی، دەبێت گەڕاندنەوەیەکی تەواو ئەنجام بدەیت و DBCC CHECKDB ڕابکێشیت.
MySQL / InnoDB: Percona XtraBackup
بۆ ژینگەکانی MySQL، پشتیوانییە فیزیکییەکان زۆرجار لەلایەن Percona XtraBackupـەوە بەڕێوەدەبرێن. پرۆسەی پشتیوانی بریتییە لە کۆپیکردنی فایلەکان، بەڵام پشتیوانییەکە تا ئەو کاتەی لۆگەکانی مامەڵە (redo logs) جێبەجێ نەکرێن، یەکگرتوو نییە. قۆناغی --prepare وەک پشکنینێکی ناوخۆیی دڵنیایی کار دەکات.
# Preparing the backup applies the redo logs.
# If the backup is corrupted, this step will fail.
xtrabackup --prepare --target-dir=/data/backups/mysql/
پێوەری زێڕین: تاقیکردنەوەی خۆکاری گەڕاندنەوە
Checksumـەکان و فەرمانەکانی پشتڕاستکردنەوە پێویستن، بەڵام بەس نین. تاکە ڕێگە بۆ ئەوەی بە دڵنیاییەوە بیسەلمێنیت کە پشتیوانییەک کارایە، گەڕاندنەوەیەتی. لە ژینگەکانی مۆدێرنی DevOpsـدا، ئەم پرۆسەیە دەبێت بەتەواوی خۆکار بێت.
بە مامەڵەکردن لەگەڵ پشتیوانییەکان وەک کۆد، دەتوانیت بۆرییەکی CI/CD بۆ گەڕاندنەوەی بنکەدراوەکانت دروست بکەیت. ئەم بۆرییە دەبێت ژێرخانی کاتی دابین بکات، گەڕاندنەوەکە جێبەجێ بکات، پرسیارەکانی پشتڕاستکردنەوە ڕابکێشێت، و ژینگەکە بسڕێتەوە.
دروستکردنی بۆرییەکی خۆکاری گەڕاندنەوە
خوارەوە نموونەیەکی سکریپتی Bashـە کە دەکرێت ڕۆژانە لەلایەن cron job یان CI runner (وەک GitLab CI یان GitHub Actions) چالاک بکرێت بۆ پشتڕاستکردنەوەی dumpـێکی لۆژیکی PostgreSQL.
#!/bin/bash
set -e
BACKUP_FILE="/mnt/storage/prod_db_latest.dump"
DB_NAME="prod_db"
CONTAINER_NAME="pg_restore_test"
echo "[INFO] Starting Automated Restore Test..."
# 1. Spin up an ephemeral PostgreSQL container
docker run --name $CONTAINER_NAME
-e POSTGRES_PASSWORD=testpass
-d postgres:15
# Wait for PostgreSQL to be ready
echo "[INFO] Waiting for database to initialize..."
until docker exec $CONTAINER_NAME pg_isready -U postgres; do
sleep 2
done
# 2. Create the target database
docker exec $CONTAINER_NAME psql -U postgres -c "CREATE DATABASE $DB_NAME;"
# 3. Execute the restore
echo "[INFO] Restoring backup..."
docker cp $BACKUP_FILE $CONTAINER_NAME:/tmp/backup.dump
docker exec $CONTAINER_NAME pg_restore -U postgres -d $DB_NAME -1 /tmp/backup.dump
# 4. Run Logical Validation Queries
echo "[INFO] Running validation queries..."
# Check if the users table has more than 10,000 records
USER_COUNT=$(docker exec $CONTAINER_NAME psql -U postgres -d $DB_NAME -t -c "SELECT COUNT(*) FROM users;")
if [ "$USER_COUNT" -lt 10000 ]; then
echo "[ERROR] Logical validation failed. Expected >10000 users, found $USER_COUNT"
# Trigger PagerDuty / Slack alert here
exit 1
else
echo "[SUCCESS] Logical validation passed. User count: $USER_COUNT"
fi
# 5. Tear down ephemeral environment
echo "[INFO] Cleaning up..."
docker rm -f $CONTAINER_NAME
echo "[INFO] Automated Restore Test Completed Successfully."
چی دەبێت پشتڕاست بکەیتەوە؟
کاتێک تاقیکردنەوەی خۆکاری گەڕاندنەوە ئەنجام دەدەیت، تەنها مەپشکنە کە ئایا بنکەدراوەکە دەست پێ دەکات یان نا. پرسیارەکانی پشتڕاستکردنەوەی تایبەت بە ئەپڵیکەیشن ڕابکێشە:
1. ژمارەی ڕیزەکان: دڵنیابە کە خشتە سەرەکییەکان ژمارەی ڕیزەکانیان وەک ئەوەی چاوەڕوان دەکرێت وایە (بۆ نموونە، خشتەی users نابێت بەتاڵ بێت).
2. داتای نوێ: بەدوای تۆمارەکاندا بگەڕێ کە لە 24 کاتژمێری ڕابردوودا دروست کراون بۆ دڵنیابوون لەوەی پشتیوانییەکە کۆن نییە.
3. دڵنیایی پەیوەندییەکان: سکریپتەکان ڕابکێشە بۆ پشکنینی کلیلە بیانییە ونبووەکان، کە ئاماژەن بۆ تێکچوونی لۆژیکی.
چاودێریکردن و ئاگادارکردنەوە بۆ نائاساییەکانی پشتیوانی
دۆزینەوەی تێکچوون پێش ئەوەی کارەسات ڕووبدات پێویستی بە چاودێرییەکی بەهێز هەیە. لە دەرەوەی دۆخەکانی سەرکەوتن/شکستی دووانەیی، دەبێت چاودێری مێتا داتای کارەکانی پشتیوانی بکەیت بۆ دۆزینەوەی نائاساییەکان.
چاودێریکردنی هێوریستیک (Heuristic)
مێتا داتای پشتیوانییەکەت بخەرە ناو Prometheus و بە Grafana نیشانی بدە. ئاگادارکردنەوەکان بۆ ئەم هێوریستیکانە دابنێ:
* دابەزینی کتوپڕی قەبارە: ئەگەر پشتیوانی ڕۆژانەت بەردەوام 500GB بێت، و پشتیوانی ئەمڕۆ 50MB بێت، ڕەنگە کارەکە بە سەرکەوتوویی تەواو بووبێت (Exit Code 0)، بەڵام ئەگەری زۆرە خشتەیەکی بەتاڵی پشتیوانی کردبێت.
* نائاساییەکانی ماوە: ئەگەر پشتیوانییەک کە بەشێوەی ئاسایی 2 کاتژمێری پێ دەچێت لە 5 خولەکدا تەواو بوو، شتێک پشتگوێ خراوە. بە پێچەوانەوە، ئەگەر 10 کاتژمێری پێ چوو، ڕەنگە تووشی داخورانی I/Oـی دیسک بووبیت کە دەکرێت ببێتە هۆی تێکچوون.
* کۆبوونەوەی WAL/Archive Log: ئەگەر بنکەدراوەکەت Write-Ahead Logs (WAL) دروست دەکات بەڵام سیستەمی پشتیوانی بە خێرایی پێویست ئەرشیفیان ناکات، مەترسی دروستبوونی بۆشایی لە زنجیرەی گەڕاندنەوەی کاتی (PITR) هەیە.
جێبەجێکردنی یاسای 3-2-1 لەگەڵ پشکنینەکانی دڵنیایی
یاسای ستانداردی پیشەسازی 3-2-1 بۆ پشتیوانی (3 کۆپی داتا، 2 میدیای جیاواز، 1 لە دەرەوەی شوێنەکە) تەنها ئەوکات کاریگەرە کە هەموو کۆپییەکان پشتڕاست کرابنەوە.
ئەمە ئەو شوێنەیە کە بەکارهێنانی چارەسەرێکی بزنس وەک CloudSave بەشێوەیەکی بەرچاو باری کارگێڕی کەم دەکاتەوە. لە جیاتی نووسین و پاراستنی سکریپتی ئاڵۆزی bash بۆ هەر نۆدێکی بنکەدراوە، CloudSave ڕاستەوخۆ لەگەڵ ژێرخانەکەت تێکەڵ دەبێت بۆ خۆکارکردنی ژیانی 3-2-1. هەڵگرتنی نەگۆڕ پێشکەش دەکات—بۆ پاراستن لە ڕانسۆم وێر—و خاوەنی خشتەی خۆکاری پشتڕاستکردنەوەی گەڕاندنەوەیە. CloudSave دەتوانێت بەشێوەی خۆکار ژینگەی ساندبۆکسی دابڕاو دروست بکات، پشتیوانییەکە دابنێت، سکریپتەکانی پشتڕاستکردنەوەی SQLـی تایبەت بە خۆت ڕابکێشێت، و دۆخی تەندروستییەکە بۆ داشبۆردە ناوەندییەکەت بنێرێتەوە.
کۆتایی
پشتیوانییە تێکچووەکانی بنکەدراوە بکوژێکی بێدەنگن کە دەکرێت بزنسەکان لەناو ببەن. پشت بەستن تەنها بە Exit Code 0ـی سکریپتێکی پشتیوانی قومارێکی مەترسیدارە.
بۆ پاراستنی ڕاستەقینەی ژینگەکانی بەرهەمهێنانت، دەبێت ستراتیژییەکی بەرگری قووڵ بگریتە بەر:
1. Checksumـی ئاستی پەڕە لەناو مەکینەی بنکەدراوەکەت چالاک بکە.
2. ئامێرەکانی پشتڕاستکردنەوەی ناوخۆیی (pg_verifybackup، RESTORE VERIFYONLY) دەستبەجێ دوای دروستکردنی پشتیوانی بەکاربهێنە.
3. چاودێری مێتا داتای پشتیوانی (قەبارە، ماوە) بکە بۆ نائاساییە هێوریستیکەکان.
4. تاقیکردنەوەی خۆکار و کاتی گەڕاندنەوە وەک بەشێک لە بۆری ڕۆژانەی کارگێڕیت جێبەجێ بکە.
بە گۆڕان لە مێنتالیتی پشتیوانی پاسیڤی “فڕێ بدە و لەبیری بکە” بۆ مۆدێلی “پشتڕاستکردنەوەی بەردەوامی گەڕاندنەوە”، دڵنیایی دەدەیت کە کاتێک کارەسات ڕوو دەدات، داتاکەت ئامادەیە، متمانەپێکراوە، و بەتەواوی دەگەڕێتەوە.