بررسی کامل ابزار 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 نشان داده و خروج
گام به گام پشتیبان گیری و بازیابی پایگاه داده 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;
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.