سایت وردپرسی دو بخش دارد: فایلها (هستهٔ وردپرس، قالب، افزونهها و مهمتر از همه پوشهٔ wp-content/uploads با همهٔ عکسها) و دیتابیس (نوشتهها، برگهها، کاربران، تنظیمات و سفارشها). بکاپ یعنی نسخهای از هر دو، و انتقال یعنی بردن هر دو به جای جدید و وصل کردنشان به هم. این راهنما هر دو کار را قدمبهقدم توضیح میدهد.
قانون ۳-۲-۱
یک قاعدهٔ قدیمی و هنوز درست: ۳ نسخه از دادهها، روی ۲ نوع فضای متفاوت، که ۱ نسخهاش بیرون از سرور اصلی باشد. برای یک سایت وردپرسی یعنی:
- بکاپ هاست: بیشتر هاستها، از جمله پلنهای JolfaCloud، بکاپ روزانهٔ خودکار دارند. این خط اول است، ولی همهچیز را به آن نسپارید.
- بکاپ افزونه: یک افزونهٔ بکاپ که خودکار و زمانبندیشده، نسخهها را به یک فضای بیرونی بفرستد.
- نسخهٔ دستی قبل از کارهای پرخطر: قبل از آپدیت بزرگ، عوض کردن قالب یا انتقال.
بکاپ خودکار با افزونه
سه افزونهٔ معروف این کار، طبق آمار wordpress.org در آبان ۱۴۰۵:
| افزونه | نصب فعال | مناسب برای |
|---|---|---|
| UpdraftPlus | بیش از ۴ میلیون | بکاپ زمانبندیشده به فضای بیرونی (FTP، SFTP، فضای ابری) و بازگردانی از داخل پیشخوان |
| All-in-One WP Migration | بیش از ۵ میلیون | ساختن یک فایل کامل از سایت و انتقال ساده؛ کار با آن خیلی آسان است |
| Duplicator | بیش از ۱ میلیون | ساختن «بسته» برای انتقال یا کپی سایت روی هاست دیگر |
- نسخهٔ رایگان این افزونهها برای بیشتر سایتها کافی است، ولی بعضی امکانات (مثل بعضی مقصدهای ذخیرهسازی، انتقال مستقیم یا حجمهای بزرگ) در نسخهٔ پولی است. قبل از انتخاب، صفحهٔ هر افزونه را ببینید.
- بکاپ دیتابیس را روزانه و بکاپ فایلها را هفتگی بگیرید؛ دیتابیس زودتر عوض میشود.
- برای فروشگاه، بکاپ دیتابیس چند بار در روز منطقی است، چون سفارشها مدام اضافه میشوند.
- هر چند ماه یک بار بازگردانی را روی یک زیردامنهٔ آزمایشی امتحان کنید. بکاپی که تست نشده، بکاپ نیست.
انتقال: افزونه یا دستی؟
برای سایتهای کوچک و متوسط، افزونه سادهترین راه است: روی سایت قدیم خروجی میگیرید، روی هاست جدید یک وردپرس خام نصب میکنید و فایل را در آن درونریزی (import) میکنید. برای سایتهای بزرگ، یا وقتی افزونه با محدودیت حجم یا زمان اجرای هاست به مشکل میخورد، روش دستی مطمئنتر است و یاد گرفتنش ارزش دارد.
انتقال دستی، قدمبهقدم
۱. فایلها: در cPanel قدیم، File Manager را باز کنید، کل محتوای پوشهٔ سایت (معمولاً public_html) را انتخاب کنید و Compress بزنید تا یک فایل zip بسازد. آن را دانلود کنید، در هاست جدید آپلود کنید و Extract بزنید. اگر به ترمینال دسترسی دارید:
cd ~/public_html
zip -r ~/site-files.zip . -x "wp-content/cache/*"۲. دیتابیس: در phpMyAdmin هاست قدیم، دیتابیس سایت را انتخاب کنید و از تب Export خروجی بگیرید. در هاست جدید با MySQL Database Wizard یک دیتابیس و یک کاربر با دسترسی کامل بسازید و فایل را در phpMyAdmin از تب Import وارد کنید. با ترمینال:
# old host
mysqldump -u OLD_DB_USER -p OLD_DB_NAME > site.sql
# new host
mysql -u NEW_DB_USER -p NEW_DB_NAME < site.sql۳. وصل کردن فایلها به دیتابیس جدید: در فایل wp-config.php این چهار خط را با اطلاعات دیتابیس جدید عوض کنید:
define( 'DB_NAME', 'newuser_wp' );
define( 'DB_USER', 'newuser_wpuser' );
define( 'DB_PASSWORD', 'STRONG-DB-PASSWORD' );
define( 'DB_HOST', 'localhost' );در cPanel، اسم دیتابیس و کاربر با نام کاربری هاست شروع میشود (مثل newuser_wp). اگر $table_prefix در سایت قدیم چیزی غیر از wp_ بوده، همان را نگه دارید.
اگر آدرس سایت عوض میشود
اگر دامنه یا مسیر عوض میشود (مثلاً از http:// به https://، یا از دامنهٔ قدیم به جدید)، آدرس قدیم در هزاران جای دیتابیس هست. هرگز با «جستوجو و جایگزینی» ساده در فایل SQL این کار را نکنید. وردپرس و افزونهها بعضی دادهها را «سریالایزشده» ذخیره میکنند که طول رشته هم داخلش ثبت شده؛ با جایگزینی ساده، طولها غلط میشود و تنظیمات قالب و ابزارکها میپرد. ابزار درست، WP-CLI است که این را میفهمد:
cd ~/public_html
wp search-replace 'http://old-site.ir' 'https://new-site.ir' --skip-columns=guid --dry-run
# if the counts look right, run it for real:
wp search-replace 'http://old-site.ir' 'https://new-site.ir' --skip-columns=guid
wp cache flush--dry-run فقط نشان میدهد چند مورد عوض میشود. اگر WP-CLI ندارید، افزونهٔ Better Search Replace همین کار را از داخل پیشخوان میکند.
تست قبل از تغییر DNS
تا DNS عوض نشده، بازدیدکنندهها هنوز سایت قدیم را میبینند؛ پس فرصت دارید سایت جدید را با خیال راحت تست کنید. سادهترین راه، فایل hosts کامپیوتر خودتان است: با آن فقط مرورگر شما دامنه را به IP هاست جدید میبرد.
# Windows: C:\Windows\System32\drivers\etc\hosts (open Notepad as Administrator)
# Linux / macOS: /etc/hosts
203.0.113.25 example.ir
203.0.113.25 www.example.irIP بالا نمونه است؛ IP هاست جدید را از cPanel (بخش General Information) بردارید. بعد از تست، این خطها را پاک کنید. برگهها، فرم تماس، ورود به پیشخوان، عکسها و اگر فروشگاه است یک سفارش آزمایشی را امتحان کنید.
تغییر DNS
- یکی دو روز قبل از انتقال، TTL رکوردهای دامنه را کم کنید (مثلاً ۳۰۰ ثانیه) تا تغییر سریعتر پخش شود.
- بعد نیمسرورها (NS) یا رکورد A را به هاست جدید ببرید. جزئیاتش در مقالهٔ تنظیم DNS دامنه آمده است.
- اگر ایمیل دامنه روی هاست قدیم است، رکوردهای MX را فراموش نکنید و صندوقها را هم منتقل کنید.
- سایت قدیم را چند روز نگه دارید؛ بعضی کاربران تا پخش کامل DNS هنوز آن را میبینند. در این چند روز روی سایت قدیم تغییر ندهید.
بعد از انتقال
- SSL هاست جدید را فعال کنید (در cPanel معمولاً AutoSSL خودکار است) و ببینید سایت با https و بدون هشدار باز میشود.
- در تنظیمات → پیوندهای یکتا، یک بار «ذخیره» بزنید تا قوانین بازنویسی آدرس از نو ساخته شود. خطای ۴۰۴ برگهها بعد از انتقال معمولاً با همین حل میشود.
- کش افزونه و کش CDN را خالی کنید.
- فرم تماس و ایمیلهای سایت را تست کنید؛ تنظیم SMTP ممکن است به هاست قبلی وابسته بوده باشد.
- در Google Search Console خطاهای جدید را چند روز دنبال کنید.
منابع
- WordPress Developer — Moving WordPress developer.wordpress.org/advanced-administration/upgrade/migrating
- WP-CLI — wp search-replace developer.wordpress.org/cli/commands/search-replace
- WordPress Developer — WordPress backups developer.wordpress.org/advanced-administration/security/backup