بیشتر مدیران سایت وقتی بکاپ را جدی می‌گیرند که دیر شده است: به‌روزرسانی خراب شده، سایت هک شده یا هاست خاموش شده و آخرین نسخه‌ی سالم یا وجود ندارد یا ماه‌ها قدیمی است. بکاپ را باید طوری بچینید که بدون یادآوری، خودش کار کند. سه پرسش جواب می‌خواهد: از چه چیزی، کجا و هر چند وقت یک بار.

اگر بعداً لازم شد از بکاپ استفاده کنید، بازگردانی بکاپ وردپرس را ببینید. این مقاله فقط درباره‌ی ساختن بکاپ‌های قابل اتکاست.

از چه چیزی بکاپ بگیریم#

سایت وردپرسی دو بخش دارد و هر دو لازم است:

بخشمحتواچقدر مهم
دیتابیسنوشته‌ها، صفحه‌ها، دیدگاه‌ها، کاربران، سفارش‌ها و تنظیماتحیاتی
wp-contentبارگذاری‌ها، قالب‌ها، افزونه‌ها و قالب فرزندحیاتی
wp-config.phpاتصال دیتابیس و کلیدهای امنیتیمهم
فایل .htaccessقواعد پیوند یکتا و ریدایرکت‌هامفید
هسته‌ی وردپرسwp-admin و wp-includesاختیاری، دوباره قابل دانلود

بکاپی که فقط فایل‌ها را بگیرد، بدون دیتابیس به درد نمی‌خورد؛ برعکس هم همین‌طور. یک بکاپ سالم هر دو را در یک زمان و با هم نگه می‌دارد.

هر چند وقت یک بار#

یک قاعده‌ی ساده: بپرسید «اگر الان سایت از بین برود، تا چه آخرین لحظه‌ای را حاضرم از دست بدهم؟» جواب همان دوره‌ی بکاپ شماست.

نوع سایتدیتابیسفایل‌ها
وبلاگ یا سایت شرکتیهفتگیهفتگی یا ماهانه
سایت خبری یا پرتکرارروزانههفتگی
فروشگاه با سفارش روزانهروزانه یا چند بار در روزهفتگی
سایت عضویت و فرومروزانههفتگی

علاوه بر برنامه‌ی ثابت، قبل از هر تغییر مهم بکاپ دستی بگیرید: به‌روزرسانی هسته، نصب افزونه‌ی سنگین یا تغییر قالب. به‌روزرسانی امن وردپرس همین عادت را توصیه می‌کند.

کجا نگه داریم#

قاعده‌ی مشهور ۳-۲-۱ در اینجا خوب جواب می‌دهد: سه نسخه، روی دو نوع محل ذخیره، با یکی بیرون از هاست. در عمل:

  1. یک نسخه روی خود هاست، برای بازگردانی سریع.
  2. یک نسخه روی سرویس ذخیره‌ی ابری یا سرور دیگر.
  3. یک نسخه‌ی دوره‌ای روی کامپیوتر خودتان.

هر مقصدی که انتخاب می‌کنید، دسترسی‌اش را با رمز قوی و در صورت امکان تأیید دومرحله‌ای حفظ کنید؛ بکاپ شامل اطلاعات کاربران است و نباید در دسترس همه باشد. بکاپ را هرگز در پوشه‌ای که از اینترنت قابل دسترس است نگه ندارید.

نگهداری نسخه‌ها هم مهم است. چند نسخه‌ی اخیر روزانه و چند نسخه‌ی قدیمی‌تر هفتگی یا ماهانه نگه دارید؛ چون گاهی مشکل را چند روز بعد می‌فهمید و بکاپ دیروز هم آلوده است.

روش اول: افزونه‌ی بکاپ#

ساده‌ترین راه برای بیشتر سایت‌ها افزونه است. افزونه‌های شناخته‌شده‌ای مثل UpdraftPlus یا مشابه آن‌ها بکاپ فایل و دیتابیس را زمان‌بندی می‌کنند و به مقصد بیرونی می‌فرستند. هنگام انتخاب این‌ها را بررسی کنید:

  • زمان‌بندی جداگانه برای فایل و دیتابیس
  • ارسال به مقصد بیرونی
  • امکان بازگردانی و جابه‌جایی
  • به‌روز بودن افزونه و سازگاری با نسخه‌ی وردپرس شما

افزونه‌ی بکاپ هم باید جزو افزونه‌های لازم باشد، نه یکی از انبوه افزونه‌ها؛ در افزونه‌های ضروری وردپرس درباره‌ی انتخاب افزونه بیشتر آمده است.

زمان‌بندی داخلی وردپرس (WP-Cron) فقط وقتی اجرا می‌شود که کسی سایت را باز کند. برای سایت کم‌بازدید، بکاپ ممکن است دیر اجرا شود. اگر هاست اجازه می‌دهد، کرون واقعی سرور را جایگزین کنید.

روش دوم: اسکریپت و کرون‌جاب#

اگر به سرور دسترسی دارید، این اسکریپت ساده دیتابیس و فایل‌ها را بکاپ می‌گیرد و نسخه‌های قدیمی‌تر از چهارده روز را پاک می‌کند. مقدارهای USER و DBNAME را عوض کنید:

Bash
#!/bin/bash
set -euo pipefail

SITE=/home/USER/public_html
DEST=/home/USER/backups
DATE=$(date +%F)

mkdir -p "$DEST"

mysqldump --defaults-extra-file=/home/USER/.my.cnf DBNAME | gzip > "$DEST/db-$DATE.sql.gz"
tar -czf "$DEST/files-$DATE.tar.gz" -C "$SITE" wp-content wp-config.php

find "$DEST" -type f -mtime +14 -delete

رمز دیتابیس را داخل اسکریپت ننویسید. فایل .my.cnf را بسازید و دسترسی‌اش را با chmod 600 محدود کنید:

Bash
[client]
user=DBUSER
password=رمز-دیتابیس

سپس اسکریپت را اجرایی کنید و در کرون هاست (از بخش کرون‌جاب پنل) هر شب ساعت سه و نیم اجرا کنید:

Bash
30 3 * * * /home/USER/backup.sh

این اسکریپت نسخه را فقط روی همان سرور می‌گذارد؛ برای نسخه‌ی بیرونی، یک خط انتقال (مثلاً با rsync یا ابزار سرویس ذخیره‌ی خودتان) به آن اضافه کنید. اگر WP-CLI نصب است، دستور wp db export هم جایگزین mysqldump می‌شود.

بکاپی که آزمایش نشده بکاپ نیست#

ماهی یک بار یک نسخه را روی لوکال یا ساب‌دامنه‌ی آزمایشی بازگردانی کنید. نصب وردپرس روی کامپیوتر محیط مناسبی برای این کار است. اگر سایت بالا آمد، همه‌ی تصویرها لود شدند و ورود به پیشخوان کار کرد، بکاپتان سالم است.

اشتباه‌هایی که بکاپ را بی‌فایده می‌کند#

  • نگه‌داشتن همه‌ی نسخه‌ها روی همان هاست. اگر حساب هاست مسدود یا سرور خراب شود، بکاپ هم همراهش می‌رود.
  • فراموش‌کردن فایل‌های حجیم. اگر پوشه‌ی بارگذاری‌ها چند گیگابایت است، بکاپ کامل هر شب منطقی نیست؛ دیتابیس را هر شب و فایل‌ها را کمتر بگیرید یا بکاپ افزایشی بزنید.
  • نبودن اعلان خطا. اگر بکاپ بی‌صدا شکست بخورد، ماه‌ها متوجه نمی‌شوید. افزونه یا اسکریپت باید در صورت خطا ایمیل بفرستد، یا دست‌کم گاهی اندازه و تاریخ آخرین فایل را بررسی کنید.
  • ذخیره‌ی کلیدها در جای عمومی. رمز دیتابیس و کلید دسترسی مقصد ابری را در اسکریپت‌های قابل‌دانلود نگذارید.

خلاصه#

  • بکاپ کامل یعنی دیتابیس، wp-content و wp-config.php، با هم و در یک زمان.
  • دوره‌ی بکاپ را با میزان اطلاعاتی که حاضرید از دست بدهید تعیین کنید.
  • حداقل یک نسخه را بیرون از هاست نگه دارید و دسترسی‌اش را محافظت کنید.
  • افزونه یا کرون‌جاب را به‌کار بگیرید تا بکاپ بدون یادآوری انجام شود.
  • قبل از تغییرهای بزرگ بکاپ دستی بگیرید و گاهی بازگردانی آزمایشی انجام دهید.