تصور کنید یک شب بعد از آپدیت افزونه وردپرس، سایت شما با خطای مرگبار سفید صفحه مواجه میشود. یا بدتر: هکری تمام فایلهای شما را رمزگذاری کرده و باج میخواهد. در این لحظات، تنها چیزی که میتواند شما را نجات دهد یک بکاپ سایت سالم و قابل بازیابی است. اما آیا صرف داشتن یک فایل زیپ قدیمی از سه ماه پیش کافی است؟ قطعاً نه. در این مقاله، استراتژی استاندارد صنعتی ۳-۲-۱ را به صورت عملی و با دستورات واقعی بررسی میکنیم تا بتوانید یک سیستم پشتیبانگیری حرفهای برای سایت خود راهاندازی کنید.
قانون ۳-۲-۱: چرا این استراتژی بکاپ سایت ضروری است؟
قانون ۳-۲-۱ یک چارچوب ساده اما قدرتمند است که توسط متخصصان فناوری اطلاعات در سراسر جهان توصیه میشود. این قانون میگوید:
- ۳ نسخه از دادههای خود داشته باشید (یک نسخه اصلی و دو نسخه پشتیبان).
- ۲ نوع رسانه مختلف (مثلاً هارد دیسک محلی و فضای ابری).
- ۱ نسخه خارج از محل (off-site) نگهداری شود.
چرا این قانون مهم است؟ اگر فقط یک نسخه بکاپ روی همان سرور اصلی داشته باشید، در صورت خرابی دیسک یا حمله ransomware، همه چیز را از دست میدهید. با رعایت این قانون، احتمال از دست رفتن کامل دادهها به شدت کاهش مییابد. در ادامه، هر جزء را با مثالهای عملی پیادهسازی میکنیم.
اجزای اصلی یک بکاپ سایت کامل
یک بکاپ سایت معمولاً از دو بخش اصلی تشکیل میشود: فایلها و دیتابیس. برای سایتهای داینامیک مانند وردپرس، هر دو بخش حیاتی هستند.
بکاپ فایلها
فایلهای سایت شامل کدهای PHP، تصاویر، فایلهای CSS و JavaScript و محتوای آپلود شده کاربران است. برای بکاپ گرفتن از فایلها در لینوکس، از دستور tar استفاده میکنیم:
tar -czf backup-files-$(date +%Y%m%d).tar.gz /var/www/html/
این دستور یک فایل فشرده با نام شامل تاریخ ایجاد میکند. برای مثال، خروجی backup-files-20250315.tar.gz خواهد بود. حتماً مسیر صحیح دایرکتوری سایت خود را جایگزین /var/www/html/ کنید.
بکاپ دیتابیس
دیتابیس MySQL یا MariaDB حاوی محتوای اصلی سایت مانند پستها، تنظیمات و اطلاعات کاربران است. از دستور mysqldump استفاده کنید:
mysqldump -u username -p database_name > backup-db-$(date +%Y%m%d).sql
پس از اجرا، رمز عبور دیتابیس را وارد کنید. برای فشردهسازی همزمان، میتوانید خروجی را مستقیماً به gzip هدایت کنید:
mysqldump -u username -p database_name | gzip > backup-db-$(date +%Y%m%d).sql.gz
نکته مهم: اگر دیتابیس شما حجیم است (بیش از ۱ گیگابایت)، از گزینه --single-transaction برای جلوگیری از قفل شدن جداول استفاده کنید.
پیادهسازی قانون ۳-۲-۱ در عمل
حالا که با ابزارهای اولیه آشنا شدیم، بیایید یک استراتژی کامل را پیادهسازی کنیم.
نسخه اول: بکاپ محلی روی سرور
اولین نسخه بکاپ را روی همان سرور اصلی ذخیره کنید. این سریعترین راه برای بازیابی در صورت خرابی جزئی است. یک دایرکتوری مخصوص ایجاد کنید:
mkdir -p /backup/local
chmod 700 /backup/local
سپس یک اسکریپت ساده برای بکاپ روزانه ایجاد کنید. فایل /usr/local/bin/backup-local.sh را با محتوای زیر بسازید:
#!/bin/bash
BACKUP_DIR="/backup/local"
DATE=$(date +%Y%m%d)
tar -czf $BACKUP_DIR/files-$DATE.tar.gz /var/www/html/
mysqldump -u root -pPASSWORD database_name | gzip > $BACKUP_DIR/db-$DATE.sql.gz
find $BACKUP_DIR -type f -mtime +7 -delete
خط آخر فایلهای قدیمیتر از ۷ روز را حذف میکند تا فضای دیسک پر نشود. اسکریپت را قابل اجرا کنید:
chmod +x /usr/local/bin/backup-local.sh
و با cron اجرا کنید:
0 2 * * * /usr/local/bin/backup-local.sh
نسخه دوم: بکاپ روی رسانه متفاوت (فضای ابری)
دومین نسخه باید روی یک رسانه متفاوت ذخیره شود. بهترین گزینه استفاده از سرویسهای ذخیرهسازی ابری مانند AWS S3، Google Cloud Storage یا سرویسهای داخلی است. با استفاده از rclone میتوانید به راحتی بکاپها را به فضای ابری منتقل کنید. ابتدا rclone را نصب و پیکربندی کنید:
rclone config
سپس یک اسکریپت جدید برای آپلود خودکار ایجاد کنید:
#!/bin/bash
rclone copy /backup/local remote:backup-site/ --progress
find /backup/local -type f -mtime +30 -delete
این اسکریپت فایلهای محلی را به فضای ابری کپی میکند و فایلهای قدیمیتر از ۳۰ روز را حذف میکند. آن را با cron اجرا کنید:
0 3 * * * /usr/local/bin/backup-cloud.sh
نسخه سوم: بکاپ خارج از سایت (off-site)
سومین نسخه باید در مکانی کاملاً جدا از سرور اصلی نگهداری شود. این میتواند یک سرور دیگر در دیتاسنتری متفاوت یا حتی یک هارد دیسک خارجی باشد که به صورت دورهای به محل دیگری منتقل میشود. برای سادگی، میتوانید از یک سرویس FTP یا SFTP روی یک سرور دیگر استفاده کنید:
#!/bin/bash
HOST="backup.example.com"
USER="ftpuser"
PASS="password"
lftp -u $USER,$PASS $HOST <
این اسکریپت با استفاده از lftp فایلها را به سرور دیگری منتقل میکند. حتماً از رمز عبور قوی و پروتکل SFTP به جای FTP استفاده کنید.
تست بازیابی: مهمترین بخش بکاپ سایت
بسیاری از افراد بکاپ میگیرند اما هرگز آن را تست نمیکنند. تا زمانی که یک بکاپ را به طور کامل بازیابی نکردهاید، نمیتوانید به آن اعتماد کنید. یک اشتباه رایج این است که فایل بکاپ خراب است یا دیتابیس ناقص است. برای تست بازیابی:
- یک سرور تست یا دایرکتوری مجزا ایجاد کنید.
- فایلهای بکاپ را استخراج کنید:
tar -xzf backup-files-20250315.tar.gz -C /tmp/test-restore/ - دیتابیس را import کنید:
mysql -u testuser -p testdb < backup-db-20250315.sql - سایت را در مرورگر باز کنید و مطمئن شوید همه چیز کار میکند.
اشتباه رایج: فراموش کردن تنظیمات مسیرها در فایلهای کانفیگ. پس از بازیابی، ممکن است مسیرهای مطلق در فایلهای PHP تغییر کرده باشند. حتماً فایل wp-config.php (در وردپرس) یا فایلهای مشابه را بررسی کنید.
اتوماسیون و مانیتورینگ بکاپ
برای اطمینان از اجرای منظم بکاپها، از ابزارهای مانیتورینگ استفاده کنید. یک راه ساده ارسال لاگ به ایمیل است:
0 2 * * * /usr/local/bin/backup-local.sh && echo "Backup successful" | mail -s "Backup Report" admin@example.com
همچنین میتوانید از ابزارهایی مانند healthchecks.io یا سرویسهای مشابه برای دریافت هشدار در صورت عدم اجرای بکاپ استفاده کنید.
نکات امنیتی برای بکاپ سایت
- فایلهای بکاپ را با رمز عبور محافظت کنید:
gpg -c backup-file.tar.gz - از پروتکلهای رمزگذاری شده (SFTP، SCP) برای انتقال استفاده کنید.
- دسترسی به دایرکتوری بکاپ را محدود کنید:
chmod 700 /backup - بکاپهای قدیمی را به صورت خودکار حذف کنید تا فضای ذخیرهسازی کنترل شود.
جمعبندی
یک استراتژی بکاپ سایت حرفهای با قانون ۳-۲-۱ تضمین میکند که در برابر هر فاجعهای مقاوم باشید. سه نسخه، دو نوع رسانه و یک نسخه خارج از سایت، همراه با تست منظم بازیابی، شما را از سردردهای بزرگ نجات میدهد. با استفاده از اسکریپتهای ارائه شده در این مقاله، میتوانید در کمتر از یک ساعت یک سیستم پشتیبانگیری خودکار راهاندازی کنید. به یاد داشته باشید: بکاپی که تست نشده باشد، بکاپ نیست. سرورنت به عنوان ارائهدهنده خدمات میزبانی وب، همواره بر اهمیت پشتیبانگیری منظم تأکید دارد و ابزارهای لازم برای این کار را در اختیار کاربران خود قرار میدهد.
دیدگاهها ۰
هنوز دیدگاهی ثبت نشده؛ اولین نفر باشید!