Artarad_Postgresql_pg_basebackup

بررسی کامل ابزار PG_BASEBACKUP جهت پشتیبان گیری از پایگاه داده Postgresql

یکی از مهمترین موارد در حوزه DBA هر پایگاه داده، اجرای سناریو های پشتیبان گیری از آن می باشد. در این مسیر ابزار ها نقش مهمی را ایفا می کنند. هر ابزار قابلیت های خاص خود را دارد. pg_basebackup (پشتیبان گیری از پایگاه داده Postgresql) ابزار قدرتمندی در این حوزه می باشدکه به وسیله آن می تواند انواع سناریو های پشتیبان گیری را اجرا نمایید.

برخی از قابلیت های این ابزار به شرح ذیل می باشد:

  • pg_basebackup برای تهیه نسخه پشتیبان از یک کلاستر پایگاه داده PostgreSQL در حال اجرا استفاده می شود. فایل پشتیبان بدون تأثیرگذاری بر سایر مشتریان به پایگاه داده گرفته می شوند.
  • این نوع از فایل پشتیبان را می توان برای بازیابی نقطه در زمان، سرورهای Streaming replication standby استفاده کرد.
  • همیشه از کل کلاستر پایگاه داده فایل پشتیبان گرفته می شود.
  • امکان پشتیبان گیری از پایگاه های داده یا اشیاء پایگاه داده وجود ندارد.
  • جهت پشتیبان گیری از پایگاه داده منفرد، ابزاری مانند pg_dump باید استفاده شود.
  • pg_basebackup می تواند نه تنها از Master، بلکه از standby نیز یک نسخه پشتیبان تهیه کند.

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

  • فایل سابقه پشتیبان ایجاد نمی شود.
  • اگر در حین پشتیبان گیری آنلاین، standby به Master ارتقا یابد، پشتیبان گیری با شکست مواجه می شود.
برخی از Option های مهم در Pg_basebackup:

-D (OR)–pgdata —> pg_basebackup دایرکتوری و هر دایرکتوری والد را در صورت لزوم ایجاد می کند یا مکان مقصد

-F (OR)–format —>فرمت خروجی را انتخاب می کند.

قالب می تواند یکی از موارد زیر باشد:

p —> متن ساده (پیش فرض)

t —> tar فرمت

–xlogdir —> مکان دایرکتوری transaction log را مشخص می کند.

-x (یا) –xlog —> استفاده از این گزینه معادل استفاده از -X با متد fetch است.

X (یا) –xlog-method —> شامل فایل‌های transaction log مورد نیاز (فایل‌های WAL) در پشتیبان‌گیری می‌شود.

روش‌های زیر برای جمع‌آوری transaction log پشتیبانی می‌شوند:

f fetch —> فایل های transaction log ها در پایان پشتیبان گیری جمع آوری می شوند. بنابراین لازم است که پارامتر wal_keep_segments به اندازه ای بالا تنظیم شود که قبل از پایان پشتیبان گیری، لاگ حذف نشود. اگر log زمانی که زمان انتقال آن است، routed شده باشد، نسخه پشتیبان از کار می افتد و غیر قابل استفاده خواهد بود.

s stream —> هنگام ایجاد نسخه پشتیبان، transaction log را جاری کنید. این یک اتصال دوم را به سرور باز می کند و هنگام اجرای پشتیبان، transaction log را به صورت موازی شروع می کند. بنابراین، از دو اتصال پیکربندی شده توسط پارامتر max_wal_senders استفاده خواهد کرد. تا زمانی که مشتری بتواند با transaction log های دریافتی همراه باشد، استفاده از این حالت نیازی به ذخیره transaction log های اضافی در Master ندارد.

 

-z (یا) –gzip —> فشرده سازی gzip خروجی فایل tar را با سطح فشرده سازی پیش فرض فعال می کند. فشرده سازی فقط در صورت استفاده از قالب tar در دسترس است.

-Z (یا) –compress —> فشرده سازی gzip خروجی فایل tar را فعال می کند و سطح فشرده سازی را مشخص می کند (۰ تا ۹، ۰ بدون فشرده سازی و ۹ بهترین فشرده سازی). فشرده سازی فقط در صورت استفاده از قالب t در دسترس است.

-l (یا) –label —> برچسب را برای نسخه پشتیبان تنظیم می کند. اگر هیچ کدام مشخص نشده باشد، از مقدار پیش فرض “pg_basebackup base backup” استفاده می شود.

 

 

-P(حرف بزرگ) (یا) — progress —> اندازه هدف را بدون WAL برآورد کنید

-v (یا) –verbose —> نام دقیق فایلی را نشان می دهد که در حال حاضر در حال پردازش است، اگر گزارش پیشرفت نیز فعال باشد.

-d (یا) –dbname —>نام پایگاه داده

-p (یا) –port —> شماره پورت پایگاه داده

-U (یا) –username —> نام کاربری برای اتصال.

-h (یا) –host —-> نام میزبان را مشخص می کند

-؟ (یا) –help —> راهنمایی درباره آرگومان های خط فرمان pg_basebackup نشان داده و خروج

معماری پایگاه داده Postgresql

 

گام به گام پشتیبان گیری و بازیابی پایگاه داده Postgres با استفاده از Pg_basebackup Utility در سیستم از راه دور و محلی:

نیازمندی ها :

مرحله اول :

سرور را بررسی کنید که از چه نسخه و چه نوع لینوکس استفاده می کنیم، در اینجا ‘nijam’ نام میزبان است

nijam:~$ lsb_release -a

No LSB modules are available.

Distributor ID: Debian

Description:    Debian GNU/Linux 8.2 (jessie)

Release:        ۸٫۲

Codename:       jessie

postgres@nijam:~$ psql -A -t -c “select version()”

PostgreSQL 9.4.5 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit

مرحله دوم :

سرور پایگاه داده را پیکربندی کنید و حد بالایی تعداد فرآیندهای فرستنده Write Ahead Log را که به طور همزمان در حال اجرا هستند را افزایش دهید.

wal_level را روی حداقل درجه بایگانی تنظیم کنید.

nijam:~$ sudo sed -i -e “s/^#wal_level = minimal/wal_level = archive/” /etc/postgresql/9.4/main/postgresql.conf

nijam:~$ sudo sed -i -e “s/^#max_wal_senders = 0/max_wal_senders = 4/” /etc/postgresql/9.4/main/postgresql.conf

مرحله سوم :

Role پایگاه داده را ایجاد کنید که نقشی مجاز است که حالت replication backup را انجام دهد.

postgres@nijam:~$ psql -c “CREATE ROLE rep REPLICATION LOGIN ENCRYPTED PASSWORD ‘password’;”

مرحله چهارم :

اعطای مجوز به کاربر “postgres” برای انجام پشتیبان گیری “local”.

nijam:~$ cat << EOF | sudo tee -a /etc/postgresql/9.4/main/pg_hba.conf

local   replication     postgres                                peer

EOF

مرحله پنجم :

اجازه نقش “rep” را برای انجام پشتیبان گیری از راه دور “database” اعطا کنید.

nijam:~$ cat << EOF | sudo tee -a /etc/postgresql/9.4/main/pg_hba.conf

host    replication     rep              ۰٫۰٫۰٫۰/۰              md5

EOF

مرحله ششم :

برای اعمال تغییرات، سرویس PostgreSQL را مجددا راه اندازی کنید.

postgres@nijam:~$ pg_ctlcluster 9.4 main restart

پشتیبان گیری با Postgres pgbasebackup:

مرحله اول :

آماده برای بازیابی نسخه پشتیبان محلی به عنوان کاربر “postgres” و ذخیره آن در دایرکتوری “pgbackup”.

postgres@nijam:~$ pg_basebackup -x -D pgbackup

مرحله دوم :

خلاصه پشتیبان گیری دایرکتوری “pgbackup” را فهرست کنید

postgres@nijam:~$ ls pgbackup/

$ ls -l pgbackup/

total 76

-rw——- 1 postgres postgres  ۲۰۸ Jan 22 03:02 backup_label

drwx—— 5 postgres postgres 4096 Jan 22 03:02 base

drwx—— 2 postgres postgres 4096 Jan 22 03:02 global

drwx—— 2 postgres postgres 4096 Jan 22 03:02 pg_clog

drwx—— 2 postgres postgres 4096 Jan 22 03:02 pg_dynshmem

drwx—— 4 postgres postgres 4096 Jan 22 03:02 pg_logical

drwx—— 4 postgres postgres 4096 Jan 22 03:02 pg_multixact

drwx—— 2 postgres postgres 4096 Jan 22 03:02 pg_notify

drwx—— 2 postgres postgres 4096 Jan 22 03:02 pg_replslot

drwx—— 2 postgres postgres 4096 Jan 22 03:02 pg_serial

drwx—— 2 postgres postgres 4096 Jan 22 03:02 pg_snapshots

drwx—— 2 postgres postgres 4096 Jan 22 03:02 pg_stat

drwx—— 2 postgres postgres 4096 Jan 22 03:02 pg_stat_tmp

drwx—— 2 postgres postgres 4096 Jan 22 03:02 pg_subtrans

drwx—— 2 postgres postgres 4096 Jan 22 03:02 pg_tblspc

drwx—— 2 postgres postgres 4096 Jan 22 03:02 pg_twophase

-rwx—— 1 postgres postgres    ۴ Jan 22 03:02 PG_VERSION

drwx—— 3 postgres postgres 4096 Jan 22 03:02 pg_xlog

-rwx—— 1 postgres postgres   ۸۸ Jan 22 03:02 postgresql.auto.conf

مرحله سوم :

فقط اطلاعات backup_label در فهرست پشتیبان بالا را بررسی کنید.

postgres@nijam:~$ cat pgbackup/pgbackup/backup_label

START WAL LOCATION: 0/2D000028 (file 00000001000000000000002D)

CHECKPOINT LOCATION: 0/2D000028

BACKUP METHOD: streamed

BACKUP FROM: master

START TIME: 2016-01-22 03:02:47 CET

LABEL: pg_basebackup base backup

مرحله چهارم :

آماده برای بازیابی نسخه پشتیبان محلی به عنوان کاربر postgres، آن را در دایرکتوری “pglabelbackup” ذخیره کنید و label سفارشی را تعریف کنید.

postgres@nijam:~$ pg_basebackup -l “Backup created at $(hostname) on $(date)” -x -D pglabelbackup

 

postgres@nijam:~$ cat pglabelbackup/base_backup

START WAL LOCATION: 0/2E000028 (file 00000001000000000000002E)

CHECKPOINT LOCATION: 0/2E000028

BACKUP METHOD: streamed

BACKUP FROM: master

START TIME: 2016-01-22 03:04:14 CET

LABEL: Backup created at nijam on Fri Jan 22 03:04:14 CET 2016

مرحله پنجم:

ایجاد پشتیبان آماده برای بازیابی از سرور راه دور با استفاده از نقش rep با ویژگی replication تعریف شده، آن را در دایرکتوری “pgremotebackup” ذخیره کنید.

postgres@nijam:~$ pg_basebackup -x -h 100.0.2.150 -U rep -D pgremotebackup

 

مرحله ششم :

با استفاده از دو اتصال موازی (برای پخش transaction log در حین ایجاد پشتیبان) از سرور راه دور با استفاده از نقش rep با ویژگی replication تعریف شده، پشتیبان آماده برای بازیابی ایجاد کنید، آن را در دایرکتوری pgremsbackup ذخیره کنید.

postgres@nijam:~$ pg_basebackup -X stream -h 100.0.2.150 -U rep -D pgremsbackup

 

مرحله هفتم :

تهیه نسخه پشتیبان آماده برای بازیابی gzipped tar از سرور راه دور با استفاده از نقش rep با ویژگی replication تعریف شده، آن را در دایرکتوری “pgremotetarbackup” ذخیره کنید.

postgres@nijam:~$ pg_basebackup -x -Ft -z -h 100.0.2.150 -U rep -D pgremotetarbackup

مرحله هشتم :

خلاصه نسخه پشتیبان فهرست راهنمای “pgremotetarbackup” را فهرست کنید.

postgres@nijam:~$ ls -l pgremotetarbackup/

total 2396

-rw-r–r– 1 postgres postgres 2453147 Jan 22 03:11 base.tar.gz
بازیابی Postgres pgbasebackup:

مرحله اول :

توقف سرور پایگاه داده

postgres@nijam:~$ pg_ctlcluster 9.4 main stop

مرحله دوم :

پشتیبان گیری از فایل های پایگاه داده فعلی

postgres@nijam:~$ mv main Lastmain.backup

مرحله سوم :

فایل های پایگاه داده آرشیو شده را در مکان محلی کپی کنید.

postgres@nijam:~$ cp -r /pgbackup main

مرحله چهارم :

سرور پایگاه داده را برای انجام بازیابی راه اندازی کنید.

postgres@nijam:~$ pg_ctlcluster 9.4 main start

کنترل ها:

مرحله اول :

نظارت بر روند بازیابی با استفاده از فایل log

postgres@nijam:~$ tail -f /var/log/postgresql/postgresql-9.4-main.log

مرحله دوم :

پایگاه داده postgres را بررسی کنید که آیا حالت بازیابی است یا نه

select * from pg_is_in_recovery;

 

منبع مستند

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *