دسته بندی:

بکاپ گرفتن در سی پنل و بازگردانی آن؛ از Partial Backup تا pkgacct و restorepkg

سایت بالا نمی‌آید، دیتابیس خراب شده یا باید یک اکانت را به سرور دیگری منتقل کنید. در چنین لحظه‌ای فقط یک چیز اهمیت دارد: یک نسخه پشتیبان سالم که واقعاً بتوانید برش گردانید. اشتباه رایج هم دقیقاً همین‌جا رخ می‌دهد؛ کاربر یک فول بکاپ می‌گیرد، فایل tar.gz را دانلود می‌کند و روز حادثه تازه می‌فهمد که خودش اجازه بازگردانی آن فایل را ندارد و باید منتظر مدیر سرور بماند.

ریشه این سردرگمی این است که بکاپ گرفتن در سی پنل در دو سطح کاملاً جدا انجام می‌شود: سطح کاربر هاست (داخل خود سی پنل) و سطح روت یا مدیر سرور (WHM و خط فرمان SSH). هر سطح ابزار خودش، فرمت خودش و مهم‌تر از همه محدودیت‌های بازگردانی خودش را دارد. در ادامه هر دو سطح را به همان ترتیبی که در عمل کار می‌کنید مرور می‌کنیم و در آخر می‌بینیم چطور چند بکاپ را یک‌جا برگردانید.

دو سطح دسترسی، دو مجموعه ابزار متفاوت

قبل از هر کاری مشخص کنید در کدام سطح ایستاده‌اید، چون نصف خطاهای رایج از اینجا شروع می‌شود:

  • سطح کاربر هاست: شما فقط به سی پنل اکانت خودتان دسترسی دارید. ابزارهایتان Backup Wizard، صفحه Backup، بخش Partial Backups و phpMyAdmin است. اگر SSH هم برایتان فعال شده باشد، mysqldump را هم دارید.
  • سطح روت / WHM: شما مدیر سرور هستید و به کل اکانت‌ها دسترسی دارید. ابزارهایتان اسکریپت‌های /scripts/pkgacct و /scripts/restorepkg در SSH و صفحه‌های بخش Backup در WHM است.

نکته‌ای که باید از همین ابتدا بدانید: فول بکاپ اکانت را کاربر هاست نمی‌تواند خودش برگرداند. کاربر می‌تواند فول بکاپ بسازد و دانلود کند، اما بازگرداندن آن فقط از سطح روت (WHM یا SSH) ممکن است. اگر هاست اشتراکی دارید و می‌خواهید بازگردانی را خودتان انجام دهید، باید سراغ بکاپ‌های جزئی (Partial) بروید.

تفاوت فول بکاپ و بکاپ جزئی (Partial Backup)

فول بکاپ (Full Backup) یک آرشیو کامل از کل اکانت است: دایرکتوری هوم و همه فایل‌ها، تمام دیتابیس‌های MySQL، حساب‌های ایمیل و محتوایشان، فورواردرها و فیلترها، رکوردهای DNS، کران‌جاب‌ها و تنظیمات اکانت. کاربرد اصلی‌اش انتقال اکانت بین سرورها و آرشیو کردن است، نه بازگردانی روزمره.

بکاپ جزئی (Partial Backup) فقط یک بخش را جدا می‌گیرد: دایرکتوری هوم، یا یک دیتابیس مشخص، یا فورواردرها و فیلترهای ایمیل. مزیت بزرگش این است که کاربر هاست می‌تواند همین فایل‌ها را خودش و بدون دخالت مدیر سرور از داخل سی پنل برگرداند. برای کارهای روزمره — مثلاً قبل از به‌روزرسانی افزونه یا تغییر قالب — بکاپ جزئی از دیتابیس و هوم دقیقاً همان چیزی است که لازم دارید.

سطح کاربر هاست: گرفتن بکاپ از داخل سی پنل

Backup Wizard؛ ساده‌ترین مسیر

در سی پنل به بخش Files بروید و Backup Wizard را باز کنید. این ابزار همان کار صفحه Backup را انجام می‌دهد اما مرحله‌به‌مرحله سؤال می‌پرسد:

  • ابتدا Back Up را انتخاب کنید.
  • سپس بین Full Backup و Partial Backup یکی را انتخاب کنید.
  • اگر Partial را انتخاب کنید، بین Home Directory، MySQL Databases و Email Forwarders & Filters یکی را می‌گیرید و فایل مستقیماً دانلود می‌شود.
  • اگر Full را انتخاب کنید، باید مقصد ذخیره را مشخص کنید (دایرکتوری هوم، سرور FTP راه دور یا انتقال با SCP) و در صورت تمایل یک آدرس ایمیل برای اطلاع از پایان کار وارد کنید. ساخت آرشیو در پس‌زمینه انجام می‌شود و بسته به حجم اکانت ممکن است دقایقی طول بکشد.

فایل فول بکاپ در دایرکتوری هوم اکانت با نامی شبیه backup-MM.DD.YYYY_HH-MM-SS_username.tar.gz ساخته می‌شود. حواستان به فضای دیسک باشد؛ این آرشیو تقریباً به اندازه کل اکانت جا می‌گیرد و اگر فضای باقی‌مانده کم باشد، ساخت بکاپ نیمه‌کاره رها می‌شود.

اگر گزینه فول بکاپ را در سی پنل خود نمی‌بینید، یعنی سرویس‌دهنده آن را برای اکانت‌های اشتراکی غیرفعال کرده است. در این حالت به‌جای جست‌وجوی راه دورزدن، از پشتیبانی درخواست بکاپ کنید. جزئیات این مسیر را در مقاله دریافت فول بکاپ توضیح داده‌ایم.

صفحه Backup و بخش Partial Backups

مسیر مستقیم‌تر، رفتن به Files > Backup است. این صفحه دو ستون اصلی دارد. در بالا دکمه Download a Full Account Backup قرار دارد و پایین‌تر، در بخش Partial Backups، سه گزینه دانلود می‌بینید:

  • Download a Home Directory Backup — آرشیو فایل‌های دایرکتوری هوم.
  • Download a MySQL Database Backup — فهرست دیتابیس‌های اکانت؛ روی نام دیتابیس مورد نظر کلیک کنید تا دانلود فایل فشرده آن شروع شود.
  • Download Email Forwarders/Filters — فورواردرها و فیلترهای ایمیل هر دامنه.

روبه‌روی هر کدام از این‌ها، بخش بازگردانی هم وجود دارد: Restore a Home Directory Backup، Restore a MySQL Database Backup و Restore Email Forwarder/Filter Backup. کافی است فایلی را که قبلاً از همین مسیر گرفته‌اید انتخاب و آپلود کنید.

خروجی Download a MySQL Database Backup یک فایل SQL فشرده است. اگر دیتابیس سنگینی دارید، این روش معمولاً مطمئن‌تر از phpMyAdmin است چون خروجی سمت سرور ساخته می‌شود و درگیر محدودیت زمانی مرورگر نمی‌شود.

خروجی گرفتن از دیتابیس با phpMyAdmin

اگر می‌خواهید روی محتوای خروجی کنترل داشته باشید یا فقط چند جدول خاص را بگیرید، phpMyAdmin انتخاب بهتری است:

  • وارد اکانت سی پنل شوید.
  • در بخش Databases روی phpMyAdmin کلیک کنید.
  • از منوی سمت چپ، دیتابیسی را که می‌خواهید از آن بکاپ بگیرید انتخاب کنید.
  • به تب Export بروید.

در صفحه Export دو حالت دارید. حالت Quick بدون سؤال اضافه، کل دیتابیس را در قالب SQL خروجی می‌دهد و برای بیشتر موارد کافی است. حالت Custom گزینه‌های مهمی به شما می‌دهد:

  • Compression را روی gzip بگذارید تا حجم فایل چند برابر کمتر شود.
  • اگر قرار است خروجی را روی دیتابیسی بریزید که جدول‌هایش از قبل وجود دارد، گزینه افزودن DROP TABLE را فعال کنید تا هنگام ایمپورت خطای تکراری بودن جدول نگیرید.
  • گزینه Character set of the file را روی utf-8 بگذارید. نکته اصلی اما سمت ایمپورت است: اگر جدول‌های شما utf8mb4 هستند، دیتابیس مقصد و کانکشن ایمپورت هم باید utf8mb4 باشند؛ ریختن همین خروجی روی دیتابیسی که هنوز روی utf8 سه‌بایتی است، کاراکترهای چهاربایتی مثل ایموجی را خراب می‌کند.

محدودیت phpMyAdmin این است که خروجی از دل مرورگر عبور می‌کند. روی دیتابیس‌های بزرگ ممکن است اجرای اسکریپت به تایم‌اوت بخورد و فایل ناقص دانلود شود. اگر فایل خروجی مشکوک به ناقص بودن است، حجمش را با انتظارتان مقایسه کنید و در صورت شک، از مسیر Download a MySQL Database Backup یا از SSH بکاپ بگیرید.

گرفتن بکاپ دیتابیس با SSH و mysqldump

اگر برای اکانت شما دسترسی SSH فعال شده باشد، مطمئن‌ترین راه گرفتن خروجی دیتابیس همین است:

mysqldump -u DBUSER -p --single-transaction --routines --triggers DBNAME > DBNAME.sql
gzip DBNAME.sql

سوییچ --single-transaction باعث می‌شود خروجی جدول‌های InnoDB بدون قفل کردن سایت گرفته شود و در عین حال از یک لحظه ثابت باشد. --routines رویه‌ها و توابع ذخیره‌شده (stored routines) را اضافه می‌کند که به‌صورت پیش‌فرض در خروجی نمی‌آیند. --triggers در mysqldump از قبل روشن است و نوشتنش فقط برای صراحت است؛ اگر روزی خواستید تریگرها را کنار بگذارید، باید --skip-triggers بدهید. توجه کنید که در سی پنل نام دیتابیس و نام کاربری دیتابیس با پیشوند نام کاربری اکانت ساخته می‌شوند (مثلاً user_wp1).

برای بازگرداندن همان فایل:

gunzip DBNAME.sql.gz
mysql -u DBUSER -p DBNAME < DBNAME.sql

دو نکته درباره همین دو خط: gunzip فایل .gz را حذف می‌کند و به‌جایش .sql می‌گذارد؛ اگر می‌خواهید آرشیو دست‌نخورده بماند، به‌جای آن gunzip -c DBNAME.sql.gz | mysql -u DBUSER -p DBNAME را اجرا کنید. مهم‌تر اینکه این ایمپورت روی داده‌های فعلی همان دیتابیس می‌نویسد و برگشتی ندارد؛ قبل از اجرا حتماً از وضعیت فعلی دیتابیس یک خروجی بگیرید.

رمز عبور را هرگز به شکل -pPASSWORD در خط فرمان ننویسید؛ این کار رمز را در تاریخچه شل و در خروجی ps برای بقیه کاربران سرور قابل دیدن می‌کند. با -p خالی کار کنید تا رمز به‌صورت تعاملی پرسیده شود.

سطح روت: pkgacct و restorepkg در SSH

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

  • pkgacct برای ساختن فایل پشتیبان کامل یک اکانت.
  • restorepkg برای بازگرداندن همان فایل.

هر دو در مسیر /scripts/ در دسترس‌اند. دقت کنید که /scripts فقط یک symlink به مسیر واقعی /usr/local/cpanel/scripts است؛ در کران‌جاب‌ها و اسکریپت‌های خودکار بهتر است مسیر کامل را بنویسید. این دستورها بخشی از خود سی پنل هستند و به توزیع لینوکس زیرین وابسته نیستند؛ روی توزیع‌هایی که سی پنل امروز پشتیبانی می‌کند (مثل AlmaLinux و CloudLinux) دقیقاً همان‌طور کار می‌کنند که سال‌ها روی CentOS کار می‌کردند.

ساخت نسخه پشتیبان با pkgacct

به‌جای username، نام کاربری اکانت مورد نظر را بنویسید:

/scripts/pkgacct username

خروجی به‌صورت پیش‌فرض در مسیر /home و با نام cpmove-username.tar.gz ساخته می‌شود. اگر می‌خواهید آرشیو جای دیگری ساخته شود، مسیر مقصد را به‌عنوان آرگومان دوم بدهید:

/scripts/pkgacct username /backup

قبل از اجرا، فضای آزاد مقصد را بررسی کنید؛ ساخت آرشیو یک اکانت بزرگ می‌تواند پارتیشن /home را پر کند و کل سرویس‌های سرور را دچار مشکل کند:

df -h /home /backup

این اسکریپت سوییچ‌های متعددی برای کوچک‌تر کردن خروجی دارد؛ مثلاً --skiphomedir که فایل‌های دایرکتوری هوم را کنار می‌گذارد و فقط تنظیمات و دیتابیس‌ها را می‌گیرد. فهرست کامل و به‌روز سوییچ‌ها را روی نسخه‌ای که در اختیار دارید ببینید:

/scripts/pkgacct --help

بازگردانی با restorepkg

ساده‌ترین حالت این است که فایل cpmove-username.tar.gz در /home باشد؛ آن‌وقت فقط نام کاربری کافی است:

/scripts/restorepkg username

اگر فایل جای دیگری است، مسیر کامل خود فایل را بدهید:

/scripts/restorepkg /backup/cpmove-username.tar.gz

سه نکته که قبل از فشردن Enter باید بدانید:

  • اگر اکانتی با همان نام کاربری از قبل روی سرور وجود داشته باشد، بازگردانی روی همان اکانت انجام می‌شود و داده‌های فعلی جایگزین می‌شوند. پس اول از وضعیت فعلی همان اکانت یک pkgacct بگیرید.
  • بازگردانی یک اکانت بزرگ ممکن است ساعت‌ها طول بکشد. اجرای دستور را داخل screen یا tmux شروع کنید تا قطع شدن SSH کار را نیمه‌کاره رها نکند.
  • خروجی اسکریپت را تا انتها بخوانید. restorepkg در پایان گزارش می‌دهد کدام بخش‌ها با خطا مواجه شده‌اند؛ اگر این گزارش را نبینید، به‌سادگی ممکن است یک بازگردانی ناقص را کامل فرض کنید.

بازگردانی گروهی چند بکاپ با یک حلقه

وقتی چند اکانت را با هم منتقل می‌کنید، بازگردانی تک‌تک وقت‌گیر است. ابتدا همه آرشیوها را در یک مسیر مشخص (مثلاً /backup) قرار دهید و ببینید دقیقاً چه نام‌هایی دارید:

cd /backup
ls -1

سپس حلقه را دقیقاً بر اساس همان الگوی نام اجرا کنید. قبل از زدن Enter مطمئن شوید هیچ‌کدام از این نام‌های کاربری روی سرور مقصد اکانت فعال ندارند؛ حلقه بدون هیچ سؤالی روی اکانت‌های موجود می‌نویسد:

for f in /backup/cpmove-*.tar.gz; do
  [ -e "$f" ] || continue
  echo "=== restoring $f ==="
  /scripts/restorepkg "$f"
done

در نمونه‌های قدیمی این کار معمولاً به شکل for a in a*; do /scripts/restorepkg $a; sleep 30; done نوشته می‌شد که چند ایراد جدی دارد و بهتر است استفاده نشود:

  • الگوی a* فقط فایل‌هایی را می‌گیرد که نامشان با حرف a شروع شود، در حالی که آرشیوهای سی پنل با cpmove- یا backup- شروع می‌شوند. نتیجه این است که یا هیچ فایلی بازگردانی نمی‌شود یا فایل‌های بی‌ربط وارد حلقه می‌شوند.
  • اگر هیچ فایلی با الگو نخواند، شل خودِ رشته a* را به‌عنوان آرگومان به دستور می‌دهد و restorepkg با ورودی بی‌معنا اجرا می‌شود. خط [ -e "$f" ] || continue دقیقاً برای پوشش همین حالت است.
  • نوشتن $a بدون کوتیشن، نام فایل‌هایی را که فاصله دارند تکه‌تکه می‌کند. همیشه "$f" بنویسید.
  • sleep 30 کار مفیدی انجام نمی‌دهد. restorepkg همگام (synchronous) اجرا می‌شود و حلقه تا پایان کامل هر بازگردانی منتظر می‌ماند؛ آن ۳۰ ثانیه فقط وقت تلف کردن است.

اگر آرشیوهای شما خروجی سیستم بکاپ خود WHM هستند (نام‌هایی شبیه backup-…_username.tar.gz)، الگوی حلقه را متناسب با همان نام‌ها تغییر دهید؛ اما برای این دسته، مسیر توصیه‌شده رابط گرافیکی WHM است که در ادامه می‌آید.

بازگردانی از رابط گرافیکی WHM

اگر ترجیح می‌دهید سراغ خط فرمان نروید، WHM همین کارها را با رابط گرافیکی انجام می‌دهد:

  • WHM > Backup > Backup Restoration — برای بازگرداندن اکانت‌هایی که با سیستم بکاپ خود WHM گرفته شده‌اند. اینجا فهرست اکانت‌ها و تاریخ بکاپ‌های موجود را می‌بینید و انتخاب می‌کنید کدام بخش‌ها (فایل‌ها، دیتابیس‌ها، ایمیل) برگردانده شود.
  • WHM > Backup > Restore a Full Backup/cpmove File — برای بازگرداندن یک فایل فول بکاپ یا cpmove که خودتان در /home قرار داده‌اید. این همان کاری است که restorepkg در خط فرمان انجام می‌دهد.
  • WHM > Transfers > Transfer Tool — وقتی می‌خواهید اکانت‌ها را مستقیماً از یک سرور به سرور دیگر منتقل کنید و اصلاً فایل بکاپ دستی نسازید.

یادآوری: تنظیم زمان‌بندی و مقصد بکاپ‌های خودکار سرور در WHM > Backup > Backup Configuration انجام می‌شود. سیستم بکاپ قدیمی سی پنل (Legacy Backup) سال‌هاست حذف شده و اگر در آموزشی به آن برخوردید، معادل امروزی‌اش همین Backup Configuration است.

بعد از بازگردانی چه چیزهایی را چک کنید

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

  • سایت را با آی‌پی جدید یا از طریق فایل hosts تست کنید تا قبل از تغییر DNS از سالم بودن آن مطمئن شوید.
  • نسخه PHP اکانت را در MultiPHP Manager بررسی کنید؛ ممکن است سرور مقصد پیش‌فرض متفاوتی داشته باشد و سایت با نسخه دیگری بالا نیاید.
  • رکوردهای DNS و گواهی SSL را کنترل کنید. اگر آی‌پی سرور عوض شده، رکورد A و صدور مجدد گواهی را فراموش نکنید.
  • حساب‌های ایمیل و کران‌جاب‌ها را باز کنید و ببینید همان چیزی هستند که انتظار دارید.

چند اصل که بکاپ را واقعاً قابل‌اتکا می‌کند

  • بکاپی که تست نشده، بکاپ نیست. حداقل یک‌بار یک بازگردانی آزمایشی روی یک اکانت تستی انجام دهید تا بدانید فایل‌هایتان سالم‌اند و بدانید کل فرآیند چقدر طول می‌کشد.
  • بکاپ را روی همان سرور نگه ندارید. اگر دیسک یا خود سرور از دست برود، بکاپ هم با آن می‌رود. یک نسخه بیرون از سرور — روی فضای دانلود جدا یا سیستم شخصی خودتان — نگه دارید.
  • دستی نگیرید، زمان‌بندی کنید. بکاپ دستی همان بکاپی است که دقیقاً هفته‌ای که به آن نیاز دارید گرفته نشده. برای اکانت‌های مهم از بکاپ زمان‌بندی‌شده استفاده کنید. اگر روی سرور شما JetBackup نصب باشد، مدیریت نسخه‌ها و بازگردانی جزئی به‌مراتب راحت‌تر از روش‌های دستی بالا خواهد بود.
  • قبل از هر تغییر بزرگ، یک بکاپ جزئی بگیرید. قبل از به‌روزرسانی سیستم مدیریت محتوا، تغییر قالب یا ویرایش دیتابیس، گرفتن یک خروجی از دیتابیس و هوم چند دقیقه بیشتر وقت نمی‌برد و می‌تواند کل روزتان را نجات دهد.

جمع‌بندی

اگر کاربر هاست هستید، مسیر روزمره‌تان Backup Wizard و بخش Partial Backups است و برای دیتابیس هم گزینه Download a MySQL Database Backup یا خروجی phpMyAdmin. فول بکاپ را می‌توانید بسازید اما بازگرداندنش کار مدیر سرور است. اگر مدیر سرور هستید، /scripts/pkgacct و /scripts/restorepkg سریع‌ترین راه ساخت و بازگردانی اکانت هستند و برای چند اکانت، یک حلقه درست با الگوی نام واقعی فایل‌ها کار را یک‌جا تمام می‌کند. مهم‌تر از انتخاب روش، این است که بکاپ زمان‌بندی‌شده باشد، بیرون از سرور نگه‌داری شود و حداقل یک‌بار تست شده باشد.