| PG_BASEBACKUP(1) | PostgreSQL 18.6 Documentation | PG_BASEBACKUP(1) |
نام (NAME)
pg_basebackup - تهیه نسخه پشتیبان پایه از یک کلاستر PostgreSQL
خلاصه دستور (SYNOPSIS)
pg_basebackup [گزینه...]
توضیحات (DESCRIPTION)
pg_basebackup برای تهیه یک نسخه پشتیبان پایه (base backup) از یک کلاستر پایگاهداده در حال اجرای PostgreSQL به کار میرود. پشتیبانگیری بدون تأثیر بر سایر کلاینتهای پایگاهداده انجام میشود و میتواند هم برای بازیابی در نقطه زمانی مشخص (point-in-time recovery؛ به بخش 25.3 مراجعه کنید) و هم به عنوان نقطه شروعی برای سرور آمادهبهکار (standby) مبتنی بر log-shipping یا streaming-replication استفاده شود (به بخش 26.2 مراجعه کنید).
pg_basebackup میتواند یک نسخه پشتیبان پایه کامل (full) یا افزایشی (incremental) از پایگاهداده تهیه کند. هنگام استفاده برای تهیه پشتیبان کامل، یک کپی دقیق از فایلهای کلاستر پایگاهداده ایجاد میکند. هنگام تهیه پشتیبان افزایشی، ممکن است برخی از فایلهایی که در نسخه کامل قرار میگرفتند با نسخههای افزایشی همان فایلها جایگزین شوند، که تنها شامل بلوکهایی هستند که از زمان پشتیبان مرجع تغییر کردهاند. یک پشتیبان افزایشی را نمیتوان مستقیماً استفاده کرد؛ بلکه ابتدا باید از pg_combinebackup(1) برای ترکیب آن با پشتیبانهای قبلی که به آنها وابسته است استفاده شود. برای اطلاعات بیشتر درباره پشتیبانهای افزایشی به بخش 25.3.3 و برای مراحل بازیابی از یک نسخه پشتیبان به بخش 25.3.5 مراجعه کنید.
در هر حالتی، pg_basebackup اطمینان حاصل میکند که سرور بهطور خودکار در حالت پشتیبانگیری قرار گرفته و از آن خارج میشود. پشتیبانگیریها همواره از کل کلاستر پایگاهداده گرفته میشوند؛ امکان تهیه نسخه پشتیبان از پایگاههای داده یا اشیاء پایگاهداده بهصورت مجزا وجود ندارد. برای پشتیبانگیریهای انتخابی، باید از ابزار دیگری مانند pg_dump(1) استفاده شود.
تهیه پشتیبان از طریق یک اتصال معمولی PostgreSQL که از پروتکل همانندسازی (replication protocol) استفاده میکند، صورت میپذیرد. این اتصال باید با یک شناسه کاربری (user ID) برقرار شود که مجوزهای REPLICATION را داشته باشد (به بخش 21.2 مراجعه کنید) یا کاربر ارشد (superuser) باشد، و pg_hba.conf نیز باید اتصال همانندسازی را مجاز بداند. سرور همچنین باید طوری پیکربندی شده باشد که مقدار max_wal_senders به اندازه کافی بالا تنظیم شده باشد تا حداقل یک walsender برای پشتیبانگیری به همراه یک مورد دیگر برای جریان WAL (در صورت استفاده) فراهم کند.
امکان اجرای همزمان چند نمونه از pg_basebackup وجود دارد، اما از نظر کارایی معمولاً بهتر است تنها یک پشتیبان تهیه شده و سپس نتیجه آن کپی شود.
pg_basebackup میتواند نه تنها از یک سرور اصلی (primary)، بلکه از یک سرور آمادهبهکار (standby) نیز نسخه پشتیبان پایه تهیه کند. برای تهیه پشتیبان از یک سرور standby، آن را به گونهای پیکربندی کنید که بتواند اتصالهای همانندسازی را بپذیرد (یعنی max_wal_senders و hot_standby را تنظیم کرده و فایل pg_hba.conf آن را به درستی پیکربندی کنید). همچنین نیاز است که full_page_writes را روی سرور primary فعال نمایید.
توجه داشته باشید که تهیه نسخه پشتیبان از یک سرور standby با محدودیتهایی همراه است:
هر زمان که pg_basebackup در حال گرفتن یک پشتیبان پایه باشد، نمای pg_stat_progress_basebackup در سرور، پیشرفت پشتیبانگیری را گزارش خواهد داد. برای جزئیات به بخش 27.4.6 مراجعه کنید..SH "گزینهها (OPTIONS)"
گزینههای خط فرمان زیر، مکان و قالب خروجی را کنترل میکنند:
-D directory
--pgdata=directory
هنگامی که پشتیبان در قالب tar است، دایرکتوری مقصد را میتوان به عنوان - (خط تیره یا dash) مشخص کرد، که باعث میشود فایل tar در stdout نوشته شود.
این گزینه الزامی است.
-F format
--format=format
p
plain
این، قالب پیشفرض است.
t
tar
اگر دایرکتوری مقصد به عنوان - (خط تیره) مشخص شود، محتویات tar در خروجی استاندارد نوشته میشود که برای هدایت (pipe) به عنوان مثال به gzip مناسب است. این حالت فقط در صورتی مجاز است که خوشه فاقد tablespaceهای اضافی بوده و از استریم WAL استفاده نشود.
-i old_manifest_file
--incremental=old_manifest_file
-R
--write-recovery-conf
ایجاد کرده و تنظیمات اتصال را به فایل postgresql.auto.conf در دایرکتوری مقصد (یا درون فایل آرشیو پایه هنگام استفاده از قالب tar) اضافه میکند. این کار راهاندازی سرور standby را با استفاده از نتایج پشتیبانگیری آسانتر میکند.
فایل postgresql.auto.conf تنظیمات اتصال و، در صورت تعیین، اسلات رونوشت (replication slot) مورد استفاده توسط pg_basebackup را ثبت خواهد کرد تا رونوشت جریانی (streaming replication) و همگامسازی اسلات رونوشت منطقی (logical replication slot synchronization) بعداً از همان تنظیمات استفاده کنند. نام پایگاه داده (dbname) تنها در صورتی ثبت میشود که صراحتاً در رشته اتصال یا متغیر محیطی مشخص شده باشد.
-t target
--target=target
از آنجا که استریم WAL به جای سرور توسط pg_basebackup پیادهسازی میشود، این گزینه نمیتواند همراه با -Xstream استفاده شود. از آنجا که این مورد پیشفرض است، هنگام مشخص کردن این گزینه باید یکی از موارد -Xfetch یا -Xnone را نیز تعیین کنید.
-T olddir=newdir
--tablespace-mapping=olddir=newdir
اگر یک tablespace به این شیوه جابهجا شود، پیوندهای نمادین درون دایرکتوری دادهٔ اصلی بهروزرسانی میشوند تا به مکان جدید اشاره کنند. بنابراین، دایرکتوری دادهٔ جدید با تمام tablespaceها در مکانهای بهروزرسانیشده، آماده استفاده برای یک نمونهٔ سرور جدید است.
در حال حاضر، این گزینه فقط با قالب خروجی plain کار میکند؛ در صورت انتخاب قالب tar نادیده گرفته میشود.
--waldir=waldir
-X method
--wal-method=method
روشهای (method) زیر برای جمعآوری لاگهای پیش از نوشتن پشتیبانی میشوند:
n
none
f
fetch
هنگام استفاده از قالب tar، فایلهای لاگ پیش از نوشتن در فایل base.tar گنجانده خواهند شد.
s
stream
این مقدار پیشفرض است.
-z
--gzip
-Z level
-Z
[{client|server}-]method[:detail]
--compress=level
--compress=[{client|server}-]method[:detail]
روش فشردهسازی میتواند روی gzip، lz4، zstd، none برای عدم فشردهسازی یا یک عدد صحیح (بدون فشردهسازی اگر 0 باشد، gzip اگر بزرگتر از 0 باشد) تنظیم شود. یک رشته جزئیات فشردهسازی را میتوان بهصورت اختیاری مشخص کرد. اگر رشته جزئیات یک عدد صحیح باشد، سطح فشردهسازی را مشخص میکند. در غیر این صورت، باید فهرستی از موارد جداشده با کاما باشد که هر یک به قالب keyword یا keyword=value هستند. در حال حاضر، کلیدواژههای پشتیبانیشده level، long و workers هستند. رشته جزئیات را نمیتوان زمانی که روش فشردهسازی بهصورت یک عدد صحیح ساده مشخص شده است استفاده کرد.
اگر هیچ سطح فشردهسازی مشخص نشود، سطح فشردهسازی پیشفرض استفاده خواهد شد. اگر فقط یک سطح بدون ذکر الگوریتم مشخص شده باشد، در صورتی که سطح بزرگتر از 0 باشد از فشردهسازی gzip استفاده میشود و اگر سطح 0 باشد، هیچ فشردهسازی استفاده نخواهد شد.
هنگامی که قالب tar همراه با gzip، lz4 یا zstd استفاده شود، پسوند .gz، .lz4 یا .zst بهترتیب بهطور خودکار به تمام نامهای فایل tar افزوده خواهد شد. هنگامی که قالب plain استفاده میشود، فشردهسازی سمت کلاینت نمیتواند مشخص شود، اما همچنان امکان درخواست فشردهسازی سمت سرور وجود دارد. اگر این کار انجام شود، سرور نسخه پشتیبان را برای ارسال فشرده کرده و کلاینت آن را از فشردگی خارج و استخراج میکند.
هنگامی که این گزینه در ترکیب با -Xstream استفاده شود، در صورتی که فشردهسازی gzip سمت کلاینت انتخاب شده باشد، pg_wal.tar با استفاده از gzip فشرده خواهد شد، اما اگر هر الگوریتم فشردهسازی دیگری انتخاب شده باشد، یا فشردهسازی سمت سرور انتخاب گردد، فشرده نخواهد شد.
گزینههای خط فرمان زیر، تولید نسخه پشتیبان و فراخوانی برنامه را واپایش میکنند:
-c {fast|spread}
--checkpoint={fast|spread}
-C
--create-slot
-l label
--label=label
-n
--no-clean
توجه داشته باشید که دایرکتوریهای tablespace در هیچیک از دو حالت پاکسازی نمیشوند.
-N
--no-sync
-P
--progress
-r rate
--max-rate=rate
این گزینه همیشه بر انتقال دایرکتوری داده تأثیر میگذارد. انتقال فایلهای WAL تنها در صورتی تحت تأثیر قرار میگیرد که روش گردآوری fetch باشد.
-S slotname
--slot=slotname
replication slot مشخصشده باید از قبل وجود داشته باشد مگر آنکه گزینه -C نیز استفاده شده باشد.
اگر این گزینه مشخص نشود و سرور از replication slotهای موقت پشتیبانی کند (نگارش 10 و جدیدتر)، آنگاه یک replication slot موقت بهطور خودکار برای استریم WAL استفاده میشود.
--sync-method=method
در لینوکس، میتوان بهجای آن از syncfs استفاده کرد تا از سیستمعامل خواسته شود کل سیستمفایلی را که شامل دایرکتوری پشتیبان است همگامسازی کند. زمانی که قالب plain استفاده شود، pg_basebackup همچنین سیستمفایلهایی را که حاوی فایلهای WAL و هر tablespace هستند همگامسازی میکند. برای اطلاعات درباره نکاتی که هنگام استفاده از syncfs باید به آنها توجه داشت، recovery_init_sync_method را ببینید.
این گزینه
هنگامی که
--no-sync استفاده
شود، هیچ
تأثیری
ندارد. -v
--verbose
--manifest-checksums=algorithm
اگر NONE انتخاب شود، مانیفست نسخهٔ پشتیبان شامل هیچ مجموع مقابلهای نخواهد بود. در غیر این صورت، با استفاده از الگوریتم مشخصشده شامل مجموع مقابلهای هر فایل در نسخهٔ پشتیبان خواهد بود. علاوه بر این، مانیفست همیشه شامل یک مجموع مقابلهای SHA256 از محتویات خود خواهد بود. الگوریتمهای SHA بهطور قابل توجهی نسبت به CRC32C بار پردازشی بیشتری روی CPU دارند، بنابراین انتخاب یکی از آنها ممکن است زمان مورد نیاز برای تکمیل نسخهٔ پشتیبان را افزایش دهد.
استفاده از یک تابع درهمسازی SHA یک خلاصهٔ امن از نظر رمزنگاری از هر فایل برای کاربرانی فراهم میکند که مایلند اطمینان یابند نسخهٔ پشتیبان دستکاری نشده است، در حالی که الگوریتم CRC-32C یک مجموع مقابلهای فراهم میآورد که محاسبهٔ آن بسیار سریعتر است؛ این الگوریتم برای کشف خطاهای ناشی از تغییرات تصادفی مناسب است اما در برابر تغییرات مخرب مقاوم نیست. توجه داشته باشید که برای مفید بودن در برابر مهاجمی که به نسخهٔ پشتیبان دسترسی دارد، مانیفست نسخهٔ پشتیبان باید بهطور امن در جای دیگری ذخیره شود یا به روش دیگری تأیید شود که از زمان تهیهٔ پشتیبان تغییر نیافته است.
از pg_verifybackup(1) میتوان برای بررسی یکپارچگی نسخهٔ پشتیبان در برابر مانیفست نسخهٔ پشتیبان استفاده کرد.
--manifest-force-encode
--no-estimate-size
بدون این گزینه، پشتیبانگیری با شمارش و برآورد اندازهٔ کل پایگاه داده آغاز میشود و سپس بازگشته و محتویات واقعی را ارسال میکند. این امر ممکن است باعث شود پشتیبانگیری کمی بیشتر طول بکشد، و بهویژه زمان ارسال اولین دادهها بیشتر خواهد بود. اگر این زمان تخمین بیش از حد طولانی است، این گزینه برای جلوگیری از آن مفید است.
این گزینه هنگام استفاده از --progress مجاز نیست.
--no-manifest
--no-slot
بهطور پیشفرض، اگر ارسال جریانی لاگ انتخاب شده باشد اما هیچ نام اسلاتی با گزینهٔ -S داده نشده باشد، یک اسلات تکثیر موقت ایجاد میشود (اگر توسط سرور مبدأ پشتیبانی شود).
هدف اصلی این گزینه این است که اجازه دهد زمانی که سرور هیچ اسلات تکثیر آزادی ندارد، یک پشتیبان اولیه (base backup) تهیه شود. استفاده از یک اسلات تکثیر تقریباً همیشه ارجح است، زیرا از حذف WALهای مورد نیاز توسط سرور در طول پشتیبانگیری جلوگیری میکند.
--no-verify-checksums
بهطور پیشفرض، مجموعهای مقابلهای اعتبارسنجی میشوند و شکست در بررسی مجموع مقابلهای منجر به وضعیت خروج غیرصفر خواهد شد. با این حال، در چنین حالتی پشتیبان اولیه حذف نخواهد شد، درست مثل اینکه گزینهٔ --no-clean استفاده شده باشد. خطاهای اعتبارسنجی مجموع مقابلهای همچنین در نمای pg_stat_database گزارش خواهند شد.
گزینههای خط فرمانی زیر اتصال به سرور مبدأ را کنترل میکنند:
-d connstr
--dbname=connstr
این گزینه برای سازگاری با سایر برنامههای کلاینت --dbname نامیده شده است، اما از آنجا که pg_basebackup به هیچ پایگاه دادهٔ خاصی در کلاستر متصل نمیشود، هر نام پایگاه دادهای که در رشتهٔ اتصال گنجانده شده باشد توسط سرور نادیده گرفته میشود. با این حال، نام پایگاه دادهای که از این طریق ارائه شده است، نام پایگاه دادهٔ پیشفرض (replication) را برای یافتن گذرواژهٔ اتصال تکثیر در ~/.pgpass بازنویسی میکند. بهطور مشابه، میانافزارها یا پروکسیهای مورد استفاده در اتصال به PostgreSQL ممکن است از این نام برای مقاصدی چون مسیریابی اتصال استفاده کنند. نام پایگاه داده همچنین میتواند توسط همگامسازی اسلات تکثیر منطقی مورد استفاده قرار گیرد.
-h host
--host=host
-p port
--port=port
-s interval
--status-interval=interval
-U username
--username=username
-w
--no-password
-W
--password
این گزینه هرگز ضروری نیست، چرا که اگر سرور احراز هویت با گذرواژه را تقاضا کند، pg_basebackup بهطور خودکار گذرواژه را درخواست خواهد کرد. با این حال، pg_basebackup یک تلاش برای اتصال را صرف پی بردن به اینکه سرور نیاز به گذرواژه دارد هدر خواهد داد. در برخی موارد برای جلوگیری از این تلاش اتصال اضافی، وارد کردن -W ارزشش را دارد.
گزینههای دیگری نیز در دسترس هستند:
-V
--version
-?
--help
این ابزار، مانند اکثر ابزارهای دیگر PostgreSQL، از متغیرهای محیطی پشتیبانیشده توسط libpq استفاده میکند (بخش 32.15 را ببینید).
متغیر محیطی PG_COLOR مشخص میکند که آیا در پیامهای عیبیابی از رنگ استفاده شود یا خیر. مقادیر ممکن عبارتند از always، auto و never.
نکات (NOTES)
در ابتدای پشتیبانگیری، باید یک نقطه بازرسی (checkpoint) روی سرور مبدأ اجرا شود. این کار ممکن است مدتی طول بکشد (بهویژه اگر از گزینهٔ --checkpoint=fast استفاده نشود)، که در طول آن pg_basebackup بهنظر بیکار خواهد رسید.
پشتیبانگیری شامل تمام فایلهای موجود در دایرکتوری داده و tablespaceها خواهد بود، از جمله فایلهای پیکربندی و هر فایل اضافی دیگری که توسط اشخاص ثالث در دایرکتوری قرار گرفته باشد، بهجز برخی فایلهای موقت مدیریتشده توسط PostgreSQL و فایلهای سیستمعامل. اما فقط فایلها و دایرکتوریهای معمولی کپی میشوند، به این استثنا که پیوندهای نمادین مورد استفاده برای tablespaceها حفظ میشوند. پیوندهای نمادینی که به دایرکتوریهای خاص شناختهشده برای PostgreSQL اشاره میکنند، بهصورت دایرکتوریهای خالی کپی میشوند. سایر پیوندهای نمادین و فایلهای ویژهٔ دستگاه نادیده گرفته میشوند. برای جزئیات دقیق بخش 54.4 را ببینید.
در قالب plain، از tablespaceها در همان مسیری که روی سرور مبدأ دارند پشتیبان گرفته میشود، مگر اینکه از گزینهٔ --tablespace-mapping استفاده شود. بدون این گزینه، اگر tablespaceها در حال استفاده باشند، اجرای پشتیبانگیری پایه با قالب plain روی همان میزبان سرور کار نخواهد کرد، زیرا نسخه پشتیبان باید در همان مکانهای دایرکتوری tablespaceهای اصلی نوشته شود.
هنگامی که قالب tar استفاده میشود، این مسئولیت کاربر است که قبل از راهاندازی یک سرور PostgreSQL که از دادهها استفاده میکند، هر فایل tar را از حالت فشرده خارج کند. اگر tablespaceهای اضافی وجود داشته باشند، فایلهای tar مربوط به آنها باید در مکانهای صحیح باز شوند. در این حالت، پیوندهای نمادین برای آن tablespaceها توسط سرور با توجه به محتویات فایل tablespace_map که در فایل base.tar گنجانده شده است، ایجاد خواهند شد.
دستور pg_basebackup با سرورهای دارای نسخهٔ اصلی یکسان یا قدیمیتر، تا نسخهٔ 9.1 کار میکند. با این حال، حالت استریم WAL (-X stream) فقط با سرور نسخهٔ 9.3 و جدیدتر، قالب tar (--format=tar) فقط با سرور نسخهٔ 9.5 و جدیدتر، و پشتیبانگیری افزایشی (--incremental) فقط با سرور نسخهٔ 17 و جدیدتر کار میکند.
در صورتی که مجوزهای گروهی روی کلاستر مبدأ فعال باشد، pg_basebackup مجوزهای گروهی را برای فایلهای داده حفظ خواهد کرد.
مثالها (EXAMPLES)
برای ایجاد یک پشتیبان پایه از سرور در mydbserver و ذخیرهٔ آن در دایرکتوری محلی /usr/local/pgsql/data:
$ pg_basebackup -h mydbserver -D /usr/local/pgsql/data
برای ایجاد یک نسخه پشتیبان از سرور محلی با یک فایل tar فشردهشده برای هر tablespace، و ذخیرهٔ آن در دایرکتوری backup، همراه با نمایش گزارش پیشرفت در حین اجرا:
$ pg_basebackup -D backup -Ft -z -P
برای ایجاد یک نسخه پشتیبان از یک پایگاه داده محلی تک-tablespace و فشردهسازی آن با bzip2:
$ pg_basebackup -D - -Ft -X fetch | bzip2 > backup.tar.bz2
(در صورت وجود چندین tablespace در پایگاه داده، این دستور ناموفق خواهد بود.)
برای ایجاد یک نسخه پشتیبان از یک پایگاه داده محلی که در آن tablespace موجود در /opt/ts به ./backup/ts منتقل شده است:
$ pg_basebackup -D backup/data -T /opt/ts=$(pwd)/backup/ts
برای ایجاد یک نسخه پشتیبان از سرور محلی با یک فایل tar برای هر tablespace که با gzip در سطح 9 فشرده شده و در دایرکتوری backup ذخیره میشود:
$ pg_basebackup -D backup -Ft --compress=gzip:9
| 2026 | PostgreSQL 18.6 |