حول المحتوى:
خطوات إنشاء سكريبت نسخ احتياطي تلقائي، ضغط الملفات، رفعها للسحابة، وجدولتها باستخدام cron.
في أي مشروع يعتمد على قواعد البيانات، سواء كان موقع استضافة مشترك، متجر إلكتروني، أو نظام داخلي في شركة، فإن النسخ الاحتياطي لقواعد البيانات ليس خيارًا إضافيًا بل ضرورة أساسية. في أنظمة Linux تحديدًا، لديك مرونة كبيرة لأتمتة كل شيء باستخدام سكربتات بسيطة وجدولة المهام باستخدام cron.
في هذا الدليل ستتعلم كيفية إعداد نسخ احتياطي قواعد البيانات Linux بشكل تلقائي، ضغط النسخ الاحتياطية، رفعها إلى خدمة سحابية، ثم جدولتها لتعمل دون تدخل يدوي.
قبل الدخول في التفاصيل العملية، من المهم فهم لماذا تحتاج لأتمتة النسخ الاحتياطي:
إذا كنت مهتمًا ببناء أنظمة قوية تعتمد على قواعد البيانات، قد يفيدك أيضًا التعرف على الفهرسة في قواعد البيانات وأهميتها لتحسين أداء الاستعلامات بالتوازي مع حماية البيانات.
للبدء في أتمتة نسخ احتياطي قواعد البيانات Linux ستحتاج إلى:
mysqldump لقواعد MySQL/MariaDBpg_dump لقواعد PostgreSQL (إن وجدت)سنعتمد على سكربت Bash بسيط يقوم بالخطوات التالية:
أولاً، أنشئ مجلدًا مخصصًا لحفظ النسخ الاحتياطية:
mkdir -p /var/backups/databases
chmod 700 /var/backups/databases
باستخدام chmod 700 نضمن أن مالك المجلد فقط هو القادر على الوصول إليه (مهم لحماية كلمات المرور وملفات قواعد البيانات).
سنبدأ بمثال على MySQL/MariaDB، وهو الأكثر شيوعًا في الاستضافات المشتركة وبيئات الويب.
أنشئ ملف سكربت جديد:
nano /usr/local/bin/db_backup.sh
ضع في الملف المحتوى التالي، ثم سنشرحه سطرًا بسطر:
#!/bin/bash
# إعدادات قاعدة البيانات
DB_USER="db_user"
DB_PASSWORD="db_password"
DB_NAME="database_name"
DB_HOST="localhost"
# إعدادات النسخ الاحتياطي
BACKUP_DIR="/var/backups/databases"
DATE=$(date +"%Y-%m-%d_%H-%M")
FILENAME="${DB_NAME}_backup_${DATE}.sql"
ARCHIVE="${FILENAME}.gz"
# إنشاء النسخة الاحتياطية باستخدام mysqldump
mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASSWORD" \
--databases "$DB_NAME" \
--single-transaction --quick --lock-tables=false \
> "$BACKUP_DIR/$FILENAME"
if [ $? -ne 0 ]; then
echo "فشل إنشاء النسخة الاحتياطية لقاعدة البيانات"
exit 1
fi
# ضغط ملف النسخة الاحتياطية
gzip "$BACKUP_DIR/$FILENAME"
# حذف النسخ الأقدم من 7 أيام
find "$BACKUP_DIR" -type f -name "${DB_NAME}_backup_*.sql.gz" -mtime +7 -delete
ثم اجعل السكربت قابلًا للتنفيذ:
chmod +x /usr/local/bin/db_backup.sh
SELECT و LOCK TABLES إن لزم.--single-transaction يساعد في أخذ نسخة متسقة بدون قفل طويل للجداول في قواعد InnoDB.إذا كنت تستخدم PostgreSQL، التعديل الأساسي سيكون على أداة النسخ:
#!/bin/bash
DB_USER="db_user"
DB_NAME="database_name"
DB_HOST="localhost"
BACKUP_DIR="/var/backups/databases"
DATE=$(date +"%Y-%m-%d_%H-%M")
FILENAME="${DB_NAME}_backup_${DATE}.sql"
ARCHIVE="${FILENAME}.gz"
export PGPASSWORD="db_password"
pg_dump -h "$DB_HOST" -U "$DB_USER" "$DB_NAME" > "$BACKUP_DIR/$FILENAME"
if [ $? -ne 0 ]; then
echo "فشل إنشاء النسخة الاحتياطية لقاعدة PostgreSQL"
exit 1
fi
gzip "$BACKUP_DIR/$FILENAME"
find "$BACKUP_DIR" -type f -name "${DB_NAME}_backup_*.sql.gz" -mtime +7 -delete
ملاحظة أمنية: من الأفضل استخدام ملف إعدادات آمن أو متغيرات بيئة بدل كتابة كلمات المرور بشكل صريح داخل السكربت في بيئات الإنتاج.
نحن استخدمنا بالفعل gzip في السكربت، لكن يمكنك استخدام bzip2 أو xz لمستوى ضغط أعلى (على حساب وقت أطول للضغط).
مثال استخدام tar + gzip لعدة قواعد بيانات:
tar -czf all_databases_backup_$(date +"%Y-%m-%d_%H-%M").tar.gz /var/backups/databases/*.sql
لكن في معظم الحالات، ضغط كل نسخة على حدة باستخدام gzip يكفي ويكون أبسط في الاسترجاع.
النسخ الاحتياطي داخل نفس السيرفر مهم، لكن في حال تعرض السيرفر ذاته لمشكلة (حذف، اختراق، تلف في القرص)، قد تفقد النسخ أيضًا. هنا تأتي أهمية الرفع إلى خدمة سحابية خارجية.
أفضل أداة مرنة وشائعة هي rclone، تدعم Google Drive، Dropbox، S3، وغيرها.
تثبيت rclone (مثال على Ubuntu):
sudo apt update
sudo apt install rclone
ثم إعداد مزود الخدمة:
rclone config
اتبع التعليمات التفاعلية لاختيار نوع الخدمة (مثل drive لـ Google Drive) وربط الحساب. بعد الإعداد، لنفترض أن اسم الريموت هو remote_backup.
أضف داخل سكربت النسخ الاحتياطي بعد خطوة الضغط:
# رفع النسخة الاحتياطية إلى السحابة باستخدام rclone
REMOTE_NAME="remote_backup"
REMOTE_DIR="db_backups"
rclone copy "$BACKUP_DIR/$ARCHIVE" "$REMOTE_NAME:$REMOTE_DIR" > /var/log/db_backup_rclone.log 2>&1
هكذا سيتم رفع النسخ المضغوطة تلقائيًا إلى مجلد db_backups على خدمتك السحابية، ويمكنك مراجعة لوج الرفع في الملف /var/log/db_backup_rclone.log.
الآن بعد أن أصبح لدينا سكربت جاهز، نحتاج لجعله يعمل تلقائيًا في أوقات محددة باستخدام cron، وهي أداة جدولة مهام مدمجة في معظم توزيعات Linux.
crontab -e
أضف السطر التالي لتشغيل سكربت النسخ الاحتياطي كل يوم عند الساعة 2 صباحًا:
0 2 * * * /usr/local/bin/db_backup.sh > /var/log/db_backup.log 2>&1
0 2 * * * تعني: الدقيقة 0، الساعة 2 صباحًا، كل يوم، كل شهر، كل أيام الأسبوع.> /var/log/db_backup.log 2>&1 لتحويل المخرجات القياسية وأخطاء السكربت إلى ملف لوق.أمثلة أخرى لجدولة مختلفة:
0 */6 * * * /usr/local/bin/db_backup.sh > /var/log/db_backup.log 2>&1
0 3 * * 0 /usr/local/bin/db_backup.sh > /var/log/db_backup.log 2>&1
أي نظام نسخ احتياطي لا يمكن اعتباره آمنًا إلا إذا تم اختبار الاسترجاع منه بنجاح. لا يكفي أن نعرف أن السكربت يعمل؛ يجب أن نتأكد من أننا قادرون على استعادة قاعدة البيانات عند الحاجة.
شغّل السكربت بشكل مباشر للتأكد من عدم وجود أخطاء:
/usr/local/bin/db_backup.sh
تحقق من:
/var/backups/databases./var/log/db_backup.log إن كنت تستخدم اللوج.rclone ls remote_backup:db_backups مثلاً.لاختبار الاسترجاع في MySQL/MariaDB:
mysql -u root -p -e "CREATE DATABASE test_restore;"
gunzip /var/backups/databases/database_name_backup_2025-01-01_02-00.sql.gz
mysql -u root -p test_restore < /var/backups/databases/database_name_backup_2025-01-01_02-00.sql
بهذا الشكل تتأكد أن النسخ الاحتياطية صالحة ويمكن الاعتماد عليها في حالة الطوارئ.
~/.my.cnf لـ MySQL) بدل تضمين كلمة المرور مباشرة في السكربت، أو استخدم متغيرات بيئة.gpg لتشفير الملفات قبل رفعها للسحابة. أتمتة نسخ احتياطي قواعد البيانات Linux ليست عملية معقدة، لكنها تحتاج إلى تخطيط جيد وتنفيذ منظم. باستخدام سكربت بسيط في Bash، مع أدوات مثل mysqldump وgzip وrclone، بالإضافة إلى جدولة cron، يمكنك بناء نظام نسخ احتياطي موثوق يقلل بشكل كبير من مخاطر فقدان البيانات.
إذا كنت تحب أتمتة المهام المتكررة، يمكنك أيضًا استكشاف مكتبات بايثون المستخدمة في أتمتة المهام اليومية، وربما مستقبلاً تبني نظام نسخ احتياطي أكثر تقدمًا يعتمد على Python وواجهات برمجية لخدمات التخزين السحابي.
حتى لو بدأت بأبسط شكل من أشكال النسخ الاحتياطي، الأهم هو أن تبدأ الآن، وتطوّر الحل تدريجيًا حسب نمو مشروعك وحساسية بياناتك.
خطوات إنشاء سكريبت نسخ احتياطي تلقائي، ضغط الملفات، رفعها للسحابة، وجدولتها باستخدام cron.
مساحة اعلانية