بکاپ گرفتن در سی پنل و بازگردانی آن؛ از 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 سریعترین راه ساخت و بازگردانی اکانت هستند و برای چند اکانت، یک حلقه درست با الگوی نام واقعی فایلها کار را یکجا تمام میکند. مهمتر از انتخاب روش، این است که بکاپ زمانبندیشده باشد، بیرون از سرور نگهداری شود و حداقل یکبار تست شده باشد.
