PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL और TimescaleDB का बैकअप लेने के लिए pgBackRest का उपयोग कैसे करें

आपका डेटा शायद कंपनी की सबसे मूल्यवान संपत्ति है, इसलिए दुर्घटना या हार्डवेयर विफलता की स्थिति में डेटा हानि को रोकने के लिए आपके पास एक आपदा रिकवरी योजना (डीआरपी) होनी चाहिए। बैकअप DR का सबसे सरल रूप है। स्वीकार्य पुनर्प्राप्ति बिंदु उद्देश्य (आरपीओ) की गारंटी देने के लिए यह हमेशा पर्याप्त नहीं हो सकता है लेकिन यह एक अच्छा पहला दृष्टिकोण है। साथ ही, आपको अपनी कंपनी की आवश्यकताओं के अनुसार एक रिकवरी टाइम ऑब्जेक्टिव (आरटीओ) को परिभाषित करना चाहिए। आरटीओ मूल्य तक पहुंचने के कई तरीके हैं, यह कंपनी के लक्ष्यों पर निर्भर करता है।

इस ब्लॉग में, हम देखेंगे कि PostgreSQL और TimescaleDB का बैकअप लेने के लिए pgBackRest का उपयोग कैसे करें और डाउनटाइम को कम करने के लिए इस बैकअप टूल की सबसे महत्वपूर्ण विशेषताओं में से एक का उपयोग कैसे करें, फुल, इंक्रीमेंटल और डिफरेंशियल बैकअप का संयोजन।

pgBackRest क्या है?

डेटाबेस के लिए विभिन्न प्रकार के बैकअप होते हैं:

  • तार्किक:बैकअप को SQL जैसे मानव-पठनीय प्रारूप में संग्रहीत किया जाता है।
  • भौतिक:बैकअप में बाइनरी डेटा होता है।
  • Full/Incremental/Differential:इन तीन प्रकार के बैकअप की परिभाषा नाम में निहित है। पूर्ण बैकअप आपके सभी डेटा की एक पूर्ण प्रति है। इंक्रीमेंटल बैकअप केवल उस डेटा का बैकअप लेता है जो पिछले बैकअप के बाद से बदल गया है और डिफरेंशियल बैकअप में केवल वही डेटा होता है जो पिछले पूर्ण बैकअप के निष्पादित होने के बाद से बदल गया है। इंक्रीमेंटल और डिफरेंशियल बैकअप को एक पूर्ण बैकअप करने में लगने वाले समय और डिस्क स्थान के उपयोग को कम करने के तरीके के रूप में पेश किया गया था।

pgBackRest एक खुला स्रोत बैकअप टूल है जो क्लासिक pg_basebackup टूल की तुलना में कुछ सुधारों के साथ भौतिक बैकअप बनाता है। हम मौजूदा बैकअप का उपयोग करके स्ट्रीमिंग प्रतिकृति के लिए प्रारंभिक डेटाबेस प्रतिलिपि करने के लिए pgBackRest का उपयोग कर सकते हैं, या हम पुराने स्टैंडबाय सर्वर के पुनर्निर्माण के लिए डेल्टा विकल्प का उपयोग कर सकते हैं।

कुछ सबसे महत्वपूर्ण pgBackRest विशेषताएं हैं:

  • समानांतर बैकअप और पुनर्स्थापना
  • स्थानीय या दूरस्थ संचालन
  • पूर्ण, वृद्धिशील और विभेदक बैकअप
  • बैकअप रोटेशन और संग्रह समाप्ति
  • बैकअप अखंडता जांच
  • बैकअप रिज्यूमे
  • डेल्टा पुनर्स्थापना
  • एन्क्रिप्शन

अब, देखते हैं कि हम अपने PostgreSQL और TimescaleDB डेटाबेस का बैकअप लेने के लिए pgBackRest का उपयोग कैसे कर सकते हैं।

pgBackRest का उपयोग कैसे करें

इस परीक्षण के लिए, हम CentOS 7 को OS के रूप में और PostgreSQL 11 को डेटाबेस सर्वर के रूप में उपयोग करेंगे। हम मान लेंगे कि आपके पास डेटाबेस स्थापित है, यदि नहीं, तो आप क्लस्टरकंट्रोल का उपयोग करके PostgreSQL या TimescaleDB दोनों को आसान तरीके से परिनियोजित करने के लिए इन लिंक का अनुसरण कर सकते हैं।

सबसे पहले, हमें pgbackrest पैकेज इंस्टॉल करना होगा।

$ yum install pgbackrest

pgBackRest का उपयोग कमांड लाइन से या CentOS7 पर /etc/pgbackrest.conf में डिफ़ॉल्ट रूप से स्थित कॉन्फ़िगरेशन फ़ाइल से किया जा सकता है। इस फ़ाइल में निम्नलिखित पंक्तियाँ हैं:

[global]
repo1-path=/var/lib/pgbackrest
#[main]
#pg1-path=/var/lib/pgsql/10/data

आप इस लिंक को देख सकते हैं कि हम इस कॉन्फ़िगरेशन फ़ाइल में कौन सा पैरामीटर जोड़ सकते हैं।

हम निम्नलिखित पंक्तियाँ जोड़ेंगे:

[testing]
pg1-path=/var/lib/pgsql/11/data

सुनिश्चित करें कि आपने निम्नलिखित कॉन्फ़िगरेशन को postgresql.conf फ़ाइल में जोड़ा है (इन परिवर्तनों के लिए एक सेवा पुनरारंभ की आवश्यकता है)।

archive_mode = on
archive_command = 'pgbackrest --stanza=testing archive-push %p'
max_wal_senders = 3
wal_level = logical

अब, एक बुनियादी बैकअप लेते हैं। सबसे पहले, हमें एक "श्लोक" बनाने की आवश्यकता है, जो एक विशिष्ट PostgreSQL या TimescaleDB डेटाबेस क्लस्टर के लिए बैकअप कॉन्फ़िगरेशन को परिभाषित करता है। यदि डेटाबेस क्लस्टर दूरस्थ है, तो छंद अनुभाग को डेटाबेस क्लस्टर पथ और होस्ट/उपयोगकर्ता को परिभाषित करना चाहिए।

$ pgbackrest --stanza=testing --log-level-console=info stanza-create
2019-04-29 21:46:36.922 P00   INFO: stanza-create command begin 2.13: --log-level-console=info --pg1-path=/var/lib/pgsql/11/data --repo1-path=/var/lib/pgbackrest --stanza=testing
2019-04-29 21:46:37.475 P00   INFO: stanza-create command end: completed successfully (554ms)

और फिर, हम कॉन्फ़िगरेशन को सत्यापित करने के लिए चेक कमांड चला सकते हैं।

$ pgbackrest --stanza=testing --log-level-console=info check
2019-04-29 21:51:09.893 P00   INFO: check command begin 2.13: --log-level-console=info --pg1-path=/var/lib/pgsql/11/data --repo1-path=/var/lib/pgbackrest --stanza=testing
2019-04-29 21:51:12.090 P00   INFO: WAL segment 000000010000000000000001 successfully stored in the archive at '/var/lib/pgbackrest/archive/testing/11-1/0000000100000000/000000010000000000000001-f29875cffe780f9e9d9debeb0b44d945a5165409.gz'
2019-04-29 21:51:12.090 P00   INFO: check command end: completed successfully (2197ms)

बैकअप लेने के लिए, निम्न कमांड चलाएँ:

$ pgbackrest --stanza=testing --type=full --log-level-stderr=info backup
INFO: backup command begin 2.13: --log-level-stderr=info --pg1-path=/var/lib/pgsql/11/data --repo1-path=/var/lib/pgbackrest --stanza=testing --type=full
WARN: option repo1-retention-full is not set, the repository may run out of space
      HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum.
INFO: execute non-exclusive pg_start_backup() with label "pgBackRest backup started at 2019-04-30 15:43:21": backup begins after the next regular checkpoint completes
INFO: backup start archive = 000000010000000000000006, lsn = 0/6000028
WARN: aborted backup 20190429-215508F of same type exists, will be cleaned to remove invalid files and resumed
INFO: backup file /var/lib/pgsql/11/data/base/16384/1255 (608KB, 1%) checksum e560330eb5300f7e2bcf8260f37f36660ce3a2c1
INFO: backup file /var/lib/pgsql/11/data/base/13878/1255 (608KB, 3%) checksum e560330eb5300f7e2bcf8260f37f36660ce3a2c1
INFO: backup file /var/lib/pgsql/11/data/base/13877/1255 (608KB, 5%) checksum e560330eb5300f7e2bcf8260f37f36660ce3a2c1
. . .
INFO: full backup size = 31.8MB
INFO: execute non-exclusive pg_stop_backup() and wait for all WAL segments to archive
INFO: backup stop archive = 000000010000000000000006, lsn = 0/6000130
INFO: new backup label = 20190429-215508F
INFO: backup command end: completed successfully (12810ms)
INFO: expire command begin
INFO: option 'repo1-retention-archive' is not set - archive logs will not be expired
INFO: expire command end: completed successfully (10ms)

अब, हमारे पास "सफलतापूर्वक पूर्ण" आउटपुट के साथ बैकअप समाप्त हो गया है, तो चलिए इसे पुनर्स्थापित करने के लिए चलते हैं। हम postgresql-11 सेवा बंद कर देंगे।

$ service postgresql-11 stop
Redirecting to /bin/systemctl stop postgresql-11.service

और दातादिर को खाली छोड़ दें।

$ rm -rf /var/lib/pgsql/11/data/*

अब, निम्न कमांड चलाएँ:

$ pgbackrest --stanza=testing --log-level-stderr=info restore
INFO: restore command begin 2.13: --log-level-stderr=info --pg1-path=/var/lib/pgsql/11/data --repo1-path=/var/lib/pgbackrest --stanza=testing
INFO: restore backup set 20190429-215508F
INFO: restore file /var/lib/pgsql/11/data/base/16384/1255 (608KB, 1%) checksum e560330eb5300f7e2bcf8260f37f36660ce3a2c1
INFO: restore file /var/lib/pgsql/11/data/base/13878/1255 (608KB, 3%) checksum e560330eb5300f7e2bcf8260f37f36660ce3a2c1
INFO: restore file /var/lib/pgsql/11/data/base/13877/1255 (608KB, 5%) checksum e560330eb5300f7e2bcf8260f37f36660ce3a2c1
. . .
INFO: write /var/lib/pgsql/11/data/recovery.conf
INFO: restore global/pg_control (performed last to ensure aborted restores cannot be started)
INFO: restore command end: completed successfully (10819ms)

फिर, postgresql-11 सेवा प्रारंभ करें।

$ service postgresql-11 stop

और अब हमारा डेटाबेस तैयार है और चल रहा है।

$ psql -U app_user world
world=> select * from city limit 5;
 id |      name      | countrycode |   district    | population
----+----------------+-------------+---------------+------------
  1 | Kabul          | AFG         | Kabol         |    1780000
  2 | Qandahar       | AFG         | Qandahar      |     237500
  3 | Herat          | AFG         | Herat         |     186800
  4 | Mazar-e-Sharif | AFG         | Balkh         |     127800
  5 | Amsterdam      | NLD         | Noord-Holland |     731200
(5 rows)

अब, देखते हैं कि हम डिफरेंशियल बैकअप कैसे ले सकते हैं।

$ pgbackrest --stanza=testing --type=diff --log-level-stderr=info backup
INFO: backup command begin 2.13: --log-level-stderr=info --pg1-path=/var/lib/pgsql/11/data --repo1-path=/var/lib/pgbackrest --stanza=testing --type=diff
WARN: option repo1-retention-full is not set, the repository may run out of space
      HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum.
INFO: last backup label = 20190429-215508F, version = 2.13
INFO: execute non-exclusive pg_start_backup() with label "pgBackRest backup started at 2019-04-30 21:22:58": backup begins after the next regular checkpoint completes
INFO: backup start archive = 00000002000000000000000B, lsn = 0/B000028
WARN: a timeline switch has occurred since the last backup, enabling delta checksum
INFO: backup file /var/lib/pgsql/11/data/base/16429/1255 (608KB, 1%) checksum e560330eb5300f7e2bcf8260f37f36660ce3a2c1
INFO: backup file /var/lib/pgsql/11/data/base/16429/2608 (448KB, 8%) checksum 53bd7995dc4d29226b1ad645995405e0a96a4a7b
. . .
INFO: diff backup size = 40.1MB
INFO: execute non-exclusive pg_stop_backup() and wait for all WAL segments to archive
INFO: backup stop archive = 00000002000000000000000B, lsn = 0/B000130
INFO: new backup label = 20190429-215508F_20190430-212258D
INFO: backup command end: completed successfully (23982ms)
INFO: expire command begin
INFO: option 'repo1-retention-archive' is not set - archive logs will not be expired
INFO: expire command end: completed successfully (14ms)

अधिक जटिल बैकअप के लिए आप pgBackRest उपयोगकर्ता मार्गदर्शिका का अनुसरण कर सकते हैं।

जैसा कि हमने पहले उल्लेख किया है, आप अपने बैकअप को प्रबंधित करने के लिए कमांड लाइन या कॉन्फ़िगरेशन फ़ाइलों का उपयोग कर सकते हैं।

ClusterControl में pgBackRest का उपयोग कैसे करें

1.7.2 संस्करण के बाद से, ClusterControl ने PostgreSQL और TimescaleDB डेटाबेस के बैकअप के लिए pgBackRest के लिए समर्थन जोड़ा है, तो आइए देखें कि हम इसे ClusterControl से कैसे उपयोग कर सकते हैं।

बैकअप बनाना

इस कार्य के लिए, ClusterControl पर जाएँ -> क्लस्टर चुनें -> बैकअप -> बैकअप बनाएँ।

हम एक नया बैकअप बना सकते हैं या एक शेड्यूल्ड को कॉन्फ़िगर कर सकते हैं। हमारे उदाहरण के लिए, हम तुरंत एक एकल बैकअप बनाएंगे।

हमें एक तरीका चुनना होगा, सर्वर जिससे बैकअप लिया जाएगा, और जहां हम बैकअप स्टोर करना चाहते हैं। हम संबंधित बटन को सक्षम करके अपने बैकअप को क्लाउड (AWS, Google या Azure) पर भी अपलोड कर सकते हैं।

इस मामले में, हम प्रारंभिक पूर्ण बैकअप लेने के लिए pgbackrestfull विधि का चयन करेंगे। इस विकल्प का चयन करते समय, हम निम्नलिखित लाल नोट देखेंगे:

"pgBackRest बैकअप बनाने के पहले प्रयास के दौरान, ClusterControl नोड को फिर से कॉन्फ़िगर करेगा (pgBackRest को परिनियोजित और कॉन्फ़िगर करता है) और उसके बाद db नोड को पहले पुनरारंभ करने की आवश्यकता होती है।"

तो, कृपया, पहले बैकअप प्रयास के लिए इसे ध्यान में रखें।

फिर हम अपने बैकअप के लिए संपीड़न और संपीड़न स्तर के उपयोग को निर्दिष्ट करते हैं।

बैकअप अनुभाग पर, हम बैकअप की प्रगति और विधि, आकार, स्थान आदि जैसी जानकारी देख सकते हैं।

वृद्धिशील बैकअप का अंतर बनाने के लिए चरण समान हैं। हमें बैकअप निर्माण के दौरान केवल वांछित विधि चुनने की आवश्यकता है।

बैकअप बहाल करना

एक बार बैकअप समाप्त हो जाने के बाद, हम इसे ClusterControl का उपयोग करके पुनर्स्थापित कर सकते हैं। इसके लिए, हमारे बैकअप सेक्शन (ClusterControl -> Select Cluster -> Backup) में, हम "रिस्टोर बैकअप" का चयन कर सकते हैं, या सीधे उस बैकअप पर "रिस्टोर" कर सकते हैं जिसे हम रिस्टोर करना चाहते हैं।

बैकअप को पुनर्स्थापित करने के लिए हमारे पास तीन विकल्प हैं। हम किसी मौजूदा डेटाबेस नोड में बैकअप को पुनर्स्थापित कर सकते हैं, एक स्टैंडअलोन होस्ट पर बैकअप को पुनर्स्थापित और सत्यापित कर सकते हैं या बैकअप से एक नया क्लस्टर बना सकते हैं।

यदि हम रिस्टोर ऑन नोड विकल्प चुनते हैं, तो हमें मास्टर नोड को निर्दिष्ट करना होगा, क्योंकि यह क्लस्टर में केवल एक ही लिखने योग्य है।

हम अपने ClusterControl में गतिविधि अनुभाग से अपने पुनर्स्थापना की प्रगति की निगरानी कर सकते हैं।

स्वचालित बैकअप सत्यापन

एक बैकअप बैकअप नहीं है यदि यह पुनर्स्थापित करने योग्य नहीं है। बैकअप सत्यापित करना कुछ ऐसा है जिसे आमतौर पर कई लोगों द्वारा उपेक्षित किया जाता है। आइए देखें कि कैसे ClusterControl PostgreSQL और TimescaleDB बैकअप के सत्यापन को स्वचालित कर सकता है और किसी भी आश्चर्य से बचने में मदद कर सकता है।

ClusterControl में, अपना क्लस्टर चुनें और "बैकअप" अनुभाग पर जाएँ, फिर, "बैकअप बनाएँ" चुनें।

स्वचालित सत्यापन बैकअप सुविधा अनुसूचित बैकअप के लिए उपलब्ध है। तो, चलिए "शेड्यूल बैकअप" विकल्प चुनें।

बैकअप शेड्यूल करते समय, विधि या स्टोरेज जैसे सामान्य विकल्पों को चुनने के अलावा, हमें शेड्यूल/फ़्रीक्वेंसी भी निर्दिष्ट करने की आवश्यकता होती है।

अगले चरण में, हम अपने बैकअप को संपीड़ित कर सकते हैं और "बैकअप सत्यापित करें" सुविधा को सक्षम कर सकते हैं।

इस सुविधा का उपयोग करने के लिए, हमें एक समर्पित होस्ट (या VM) की आवश्यकता है जो क्लस्टर का हिस्सा नहीं है।

ClusterControl सॉफ़्टवेयर स्थापित करेगा और यह इस होस्ट में बैकअप को पुनर्स्थापित करेगा। पुनर्स्थापित करने के बाद, हम क्लस्टर नियंत्रण बैकअप अनुभाग में सत्यापन चिह्न देख सकते हैं।

सुझाव

कुछ टिप्स भी हैं जिन्हें हम अपना बैकअप बनाते समय ध्यान में रख सकते हैं:

  • बैकअप को किसी दूरस्थ स्थान पर संग्रहीत करें:हमें बैकअप को डेटाबेस सर्वर पर संग्रहीत नहीं करना चाहिए। सर्वर की विफलता के मामले में, हम एक ही समय में डेटाबेस और बैकअप खो सकते हैं।
  • डेटाबेस सर्वर पर नवीनतम बैकअप की एक प्रति रखें:यह तेजी से पुनर्प्राप्ति के लिए उपयोगी हो सकता है।
  • इन्क्रीमेंटल/डिफरेंशियल बैकअप का उपयोग करें:बैकअप रिकवरी समय और डिस्क स्थान के उपयोग को कम करने के लिए।
  • WALs का बैकअप लें:यदि हमें पिछले बैकअप से डेटाबेस को पुनर्स्थापित करने की आवश्यकता है, यदि आप इसे केवल पुनर्स्थापित करते हैं, तो आप परिवर्तनों को खो देंगे क्योंकि बैकअप पुनर्स्थापना समय तक लिया गया था, लेकिन यदि हमारे पास WAL हैं तो हम आवेदन कर सकते हैं परिवर्तन और हम PITR का उपयोग कर सकते हैं।
  • तार्किक और भौतिक बैकअप दोनों का उपयोग करें:दोनों अलग-अलग कारणों से आवश्यक हैं, उदाहरण के लिए, यदि हम केवल एक डेटाबेस/टेबल को पुनर्स्थापित करना चाहते हैं, तो हमें भौतिक बैकअप की आवश्यकता नहीं है, हमें केवल तार्किक बैकअप की आवश्यकता है और यह पूरे सर्वर को पुनर्स्थापित करने के लिए और भी तेज़ हो।
  • स्टैंडबाय नोड्स से बैकअप लें (यदि यह संभव हो):प्राथमिक नोड पर अतिरिक्त भार से बचने के लिए, स्टैंडबाय सर्वर से बैकअप लेना एक अच्छा अभ्यास है।
  • अपने बैकअप का परीक्षण करें:बैकअप के पूर्ण होने की पुष्टि यह सुनिश्चित करने के लिए पर्याप्त नहीं है कि बैकअप काम कर रहा है। हमें इसे एक स्टैंडअलोन सर्वर पर पुनर्स्थापित करना चाहिए और विफलता के मामले में आश्चर्य से बचने के लिए इसका परीक्षण करना चाहिए।

निष्कर्ष

जैसा कि हम देख सकते थे, हमारी बैकअप रणनीति को बेहतर बनाने के लिए pgBackRest एक अच्छा विकल्प है। यह आपके डेटा को सुरक्षित रखने में आपकी मदद करता है और विफलता के मामले में डाउनटाइम को कम करके आरटीओ तक पहुंचना उपयोगी हो सकता है। वृद्धिशील बैकअप बैकअप प्रक्रिया के लिए उपयोग किए जाने वाले समय और संग्रहण स्थान की मात्रा को कम करने में मदद कर सकते हैं। ClusterControl आपके PostgreSQL और TimescaleDB डेटाबेस के लिए बैकअप प्रक्रिया को स्वचालित करने में मदद कर सकता है और विफलता के मामले में, इसे कुछ क्लिक के साथ पुनर्स्थापित कर सकता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पोस्टग्रेएसक्यूएल बी-ट्री इंडेक्स पर नोट्स

  2. ON CONFLICT क्लॉज में कई विरोध_लक्ष्य का उपयोग करें

  3. PostgreSQL त्रुटि:पुनर्प्राप्ति के साथ विरोध के कारण कथन रद्द करना

  4. PostgreSQL डेटाबेस का ऑडिट कैसे करें

  5. सिंक से बाहर होने पर पोस्टग्रेज के प्राथमिक कुंजी अनुक्रम को कैसे रीसेट करें?