كلاود
أدلة

استراتيجية النسخ الاحتياطي لقواعد البيانات

كلاود|٣ فبراير ٢٠٢٦|4 دقائق قراءة|٥١٤ مشاهدة
استراتيجية النسخ الاحتياطي لقواعد البيانات

mysqldump يومياً مو كافي. Incremental backup، point-in-time recovery، واختبار دوري. نشرح الاستراتيجية الكاملة.

لماذا النسخ الاحتياطي ضرورة وليس خيار؟

فقدان البيانات يحدث أكثر مما تتوقع. خطأ بشري في استعلام DELETE بدون WHERE، فساد في القرص، هجمة فدية، أو حتى تحديث فاشل. بدون نسخ احتياطي موثوق ومختبر، أي من هذه السيناريوهات تعني كارثة قد تنهي عملك.

الإحصائيات واضحة: 60% من الشركات الصغيرة التي تفقد بياناتها تغلق خلال 6 أشهر. النسخ الاحتياطي ليس تكلفة إضافية، هو تأمين على استمرارية عملك.

أنواع النسخ الاحتياطي

1. النسخ الكامل (Full Backup)

نسخة كاملة من كل البيانات في كل مرة.

المميزات: استعادة سريعة ومباشرة. ملف واحد يحتوي كل شيء. العيوب: يستهلك مساحة كبيرة ووقت طويل. غير عملي يوميا لقواعد البيانات الكبيرة.

2. النسخ التفاضلي (Differential Backup)

ينسخ فقط التغييرات منذ آخر نسخة كاملة.

المميزات: أسرع من النسخ الكامل. استعادة تحتاج ملفين فقط (كامل + تفاضلي). العيوب: الحجم يزداد كل يوم حتى النسخة الكاملة التالية.

3. النسخ التزايدي (Incremental Backup)

ينسخ فقط التغييرات منذ آخر نسخة من أي نوع.

المميزات: أصغر حجما وأسرع تنفيذا. العيوب: الاستعادة تحتاج كل الملفات التزايدية بالترتيب. فقدان ملف واحد يفسد السلسلة.

مقارنة الأنواع

المعيار كامل تفاضلي تزايدي
حجم النسخة كبير متوسط ومتزايد صغير
وقت النسخ طويل متوسط قصير
وقت الاستعادة قصير متوسط طويل
التعقيد بسيط متوسط معقد
الملفات المطلوبة للاستعادة 1 2 عديدة

استراتيجية 3-2-1

القاعدة الذهبية للنسخ الاحتياطي:

  • 3 نسخ من بياناتك على الأقل
  • 2 وسيط تخزين مختلفين (قرص محلي + تخزين سحابي)
  • 1 نسخة خارج الموقع (في مكان جغرافي مختلف)

هذه الاستراتيجية تحميك من كل السيناريوهات: فشل القرص (نسخة ثانية)، كارثة في الموقع (نسخة خارجية)، وفساد البيانات (نسخ متعددة بأوقات مختلفة).

النسخ الاحتياطي لـ MySQL

mysqldump (النسخ المنطقي)

الأداة الأبسط والأكثر استخداما:

# نسخ قاعدة بيانات واحدة
mysqldump -u root -p mydb > /backup/mydb_$(date +%Y%m%d_%H%M%S).sql

# نسخ كل القواعد
mysqldump -u root -p --all-databases > /backup/all_$(date +%Y%m%d_%H%M%S).sql

# نسخ مع ضغط
mysqldump -u root -p mydb | gzip > /backup/mydb_$(date +%Y%m%d).sql.gz

# نسخ مع بيانات فقط بدون هيكل
mysqldump -u root -p --no-create-info mydb > /backup/data_only.sql

Percona XtraBackup (النسخ المادي)

للقواعد الكبيرة التي لا تتحمل التوقف:

# نسخ كامل بدون قفل الجداول
xtrabackup --backup --target-dir=/backup/full/

# نسخ تزايدي
xtrabackup --backup --target-dir=/backup/inc1/ \
 --incremental-basedir=/backup/full/

# تحضير النسخة للاستعادة
xtrabackup --prepare --target-dir=/backup/full/

Binary Log Replication

لاستعادة البيانات لنقطة زمنية محددة (Point-in-Time Recovery):

# تفعيل Binary Logging
# في my.cnf:
server-id = 1
log_bin = /var/log/mysql/mysql-bin
binlog_expire_logs_seconds = 604800
binlog_format = ROW

# استعادة لنقطة زمنية
mysqlbinlog --stop-datetime="2026-03-25 14:30:00" \
 /var/log/mysql/mysql-bin.000001 | mysql -u root -p

النسخ الاحتياطي لـ PostgreSQL

pg_dump (النسخ المنطقي)

# نسخ قاعدة بيانات
pg_dump -U postgres mydb > /backup/mydb_$(date +%Y%m%d).sql

# نسخ بتنسيق مخصص (يدعم الاستعادة الانتقائية)
pg_dump -U postgres -Fc mydb > /backup/mydb_$(date +%Y%m%d).dump

# نسخ كل القواعد
pg_dumpall -U postgres > /backup/all_$(date +%Y%m%d).sql

# استعادة من تنسيق مخصص
pg_restore -U postgres -d mydb /backup/mydb_20260325.dump

pg_basebackup (النسخ المادي)

# نسخ مادي كامل
pg_basebackup -U postgres -D /backup/base \
 -Ft -z -P --wal-method=stream

# إعداد WAL Archiving للاستعادة الزمنية
# في postgresql.conf:
archive_mode = on
archive_command = 'cp %p /backup/wal/%f'
wal_level = replica

جدولة النسخ الاحتياطي

الاستراتيجية الموصى بها

التكرار النوع الاحتفاظ الوسيط
كل ساعة WAL/Binary Log 48 ساعة محلي
يومي (2:00 AM) تزايدي 7 أيام محلي + خارجي
أسبوعي (الجمعة) كامل 4 أسابيع محلي + خارجي
شهري (1 من كل شهر) كامل 12 شهر خارجي فقط

أتمتة مع Cron

# /etc/cron.d/database-backup

# نسخ يومي الساعة 2 صباحا
0 2 * * * root /opt/scripts/daily-backup.sh >> /var/log/backup.log 2>&1

# نسخ أسبوعي كل جمعة الساعة 1 صباحا
0 1 * * 5 root /opt/scripts/weekly-backup.sh >> /var/log/backup.log 2>&1

# تنظيف النسخ القديمة يوميا
30 3 * * * root find /backup/daily -mtime +7 -delete

اختبار الاستعادة

النسخ الاحتياطي بدون اختبار استعادة لا قيمة له. جدول اختبارات منتظمة:

  1. أسبوعيا: تأكد من اكتمال ملفات النسخ وسلامتها
  2. شهريا: استعد نسخة كاملة على سيرفر اختبار وتحقق من البيانات
  3. ربع سنوي: اختبار استعادة كامل مع قياس الوقت (يجب أن يكون ضمن RTO المحدد)
# التحقق من سلامة النسخة
# MySQL
mysqlcheck -u root -p --all-databases

# PostgreSQL
pg_restore --list /backup/mydb.dump | head -20

التخزين الخارجي

خيارات التخزين

الخيار التكلفة السرعة الأمان
S3 / Object Storage منخفضة متوسطة عالي مع تشفير
سيرفر ثاني في موقع مختلف متوسطة عالية عالي
NFS / SAN عالية عالية جدا عالي

تشفير النسخ

النسخ الاحتياطية تحتوي بيانات حساسة. التشفير إلزامي:

# تشفير مع GPG
mysqldump -u root -p mydb | gzip | \
 gpg --encrypt --recipient backup@example.com > /backup/mydb.sql.gz.gpg

# تشفير مع OpenSSL
pg_dump -U postgres mydb | gzip | \
 openssl enc -aes-256-cbc -salt -out /backup/mydb.sql.gz.enc

الخلاصة

النسخ الاحتياطي الفعال يجمع بين أنواع متعددة واستراتيجية 3-2-1 واختبار دوري. لا تنتظر الكارثة لتكتشف إن نسخك لا تعمل. على سيرفرات كلاود (cloud.net.sa) نوفر خدمة نسخ احتياطي يومي كإضافة مع احتفاظ 7 أو 30 يوم، لكن النسخ الاحتياطي على مستوى قاعدة البيانات يبقى مسؤوليتك كمدير للتطبيق. ابدأ اليوم.


ابدأ الآن

تبي تجرب بنفسك؟ اختر باقة الاستضافة المناسبة أو صمم سيرفرك الخاص بالمواصفات اللي تبيها.

مشاركة