محتويات الدليل
لماذا نحتاج نسخاً احتياطية أصلاً؟
نسخة يدوية سريعة
تصدير قاعدة البيانات كاملة إلى ملف واحد
mysqldump -u workup_user -p workup > ~/workup_backup_$(date +%F).sql
mysqldump يقرأ كل جدول بقاعدة workup ويحوّله لأوامر SQL نصّية داخل ملف واحد (نفس فكرة ملف db.sql الذي استوردناه بالتثبيت، لكن هذه المرة يحتوي بياناتك الحقيقية). $(date +%F) يضيف تاريخ اليوم لاسم الملف تلقائياً (مثل workup_backup_2026-07-17.sql) حتى لا تخلط بين النسخ.
تأكد أن الملف تكوّن فعلاً وحجمه منطقي (ليس صفراً):
ls -lh ~/workup_backup_*.sql
نسخ تلقائي يومي عبر Cron
إنشاء سكربت نسخ احتياطي بسيط
sudo mkdir -p /var/backups/workup sudo nano /usr/local/bin/workup-backup.sh
الصق هذا المحتوى بالضبط:
#!/bin/bash # تاريخ اليوم، يُستخدم بتسمية الملفات DATE=$(date +%F) # نسخة قاعدة البيانات mysqldump -u workup_user -p'ضع_كلمة_المرور_هنا' workup > /var/backups/workup/db_$DATE.sql # نسخة مجلد files (الصور والمرفقات) كملف مضغوط واحد tar -czf /var/backups/workup/files_$DATE.tar.gz -C /var/www/html/WorkUp files # نحذف أي نسخة أقدم من 14 يوماً حتى لا يمتلئ القرص find /var/backups/workup -type f -mtime +14 -delete
هذا السكربت يفعل ثلاثة أشياء بالترتيب: (1) ينسخ قاعدة البيانات، (2) يضغط مجلد files بأكمله بملف واحد صغير، (3) يحذف النسخ الأقدم من أسبوعين تلقائياً حتى لا تمتلئ مساحة القرص بمرور الوقت.
اجعل السكربت قابلاً للتنفيذ:
sudo chmod +x /usr/local/bin/workup-backup.sh
workup_user الحقيقية بدل ضع_كلمة_المرور_هنا، واحرص أن يكون هذا الملف مقروءاً فقط من المدير: sudo chmod 700 /usr/local/bin/workup-backup.sh — لأنه يحتوي كلمة مرور قاعدة البيانات كنص صريح.
جدولته يومياً عبر crontab
sudo crontab -e
أضف هذا السطر بآخر الملف (اختر nano إن سألك عن محرر):
0 3 * * * /usr/local/bin/workup-backup.sh
هذا يعني حرفياً: "شغّل هذا السكربت كل يوم الساعة 3:00 فجراً". الأرقام الخمسة هي (بالترتيب): الدقيقة، الساعة، يوم الشهر، الشهر، يوم الأسبوع — والنجمة * تعني "كل قيمة، بدون شرط".
نسخ مجلد files (الصور والمرفقات)
files/ على القرص، وليست بداخل قاعدة البيانات. لهذا السكربت بالأعلى يأخذ نسخة منه أيضاً (tar -czf) بجانب نسخة قاعدة البيانات — الاثنان معاً يشكّلان "نسخة احتياطية كاملة" حقيقية.
حفظ نسخة خارج السيرفر
انسخ النسخ الاحتياطية لمكان آخر تماماً بشكل دوري
أبسط طريقة: انسخها من جهازك الشخصي (وليس من السيرفر) بأمر واحد أسبوعياً:
scp root@عنوان_IP_السيرفر:/var/backups/workup/*.sql ~/workup-backups-local/ scp root@عنوان_IP_السيرفر:/var/backups/workup/*.tar.gz ~/workup-backups-local/
بدائل أفضل للمدى الطويل: رفعها تلقائياً لخدمة تخزين سحابي (Google Drive، Dropbox، أو Amazon S3) عبر أداة مثل rclone. الفكرة الأساسية واحدة دائماً: لا تثق بمكان واحد فقط.
كيف تستعيد نسخة عند الحاجة
استعادة قاعدة البيانات
mysql -u workup_user -p workup < /var/backups/workup/db_2026-07-17.sql
استعادة مجلد files
# فك الضغط في مكان مؤقت أولاً للتأكد من محتواه tar -xzf /var/backups/workup/files_2026-07-17.tar.gz -C /tmp/restore-check # بعد التأكد، انسخه للمكان الفعلي (يستبدل المجلد الحالي) sudo rm -rf /var/www/html/WorkUp/files sudo tar -xzf /var/backups/workup/files_2026-07-17.tar.gz -C /var/www/html/WorkUp sudo chown -R www-data:www-data /var/www/html/WorkUp/files sudo chmod -R 775 /var/www/html/WorkUp/files
لا تنسَ إعادة ضبط الصلاحيات بعد الاستعادة (نفس صلاحيات خطوة التثبيت) — الملفات المستعادة من نسخة احتياطية قد تحمل صلاحيات مختلفة عن ما يحتاجه الخادم.