आपका डेटाबेस सर्वर आपके उद्यम की कुछ सबसे मूल्यवान जानकारी संग्रहीत करता है। किसी दुर्घटना या हार्डवेयर की विफलता की स्थिति में डेटा हानि को रोकने के लिए विश्वसनीय डेटाबेस बैकअप की गारंटी एक महत्वपूर्ण चेकबॉक्स है।
चाहे वह 24x7 अत्यधिक लोड वाला सर्वर हो या कम लेन-देन-मात्रा वाला वातावरण, आपको उत्पादन वातावरण में सर्वर के प्रदर्शन को बाधित किए बिना बैकअप को एक सहज प्रक्रिया बनाने की आवश्यकता होगी।
इस ब्लॉग में, हम इस कार्य को पूरा करने के लिए सबसे अधिक उपयोग किए जाने वाले दो टूल, अर्थात् Percona XtraBackup और Mariabackup की समीक्षा करने जा रहे हैं। हम उन दोनों के बीच समानता और अंतर की समीक्षा करेंगे, और यह भी देखेंगे कि उनका उपयोग कैसे किया जाए।
पेरकोना एक्स्ट्राबैकअप क्या है?
Percona XtraBackup, MariaDB, MySQL और Percona Server डेटाबेस के बैकअप करने के लिए एक ओपन सोर्स टूल है। यह ऑनलाइन नॉन-ब्लॉकिंग (समर्थित इंजनों के लिए) करता है, कसकर संकुचित और ट्रांजेक्शनल सिस्टम पर पूर्ण बैकअप सुरक्षित करता है ताकि बैकअप विंडो की अवधि के लिए एप्लिकेशन पूरी तरह से उपलब्ध रहें।
इस टूल का उपयोग करके आप यह कर सकते हैं:
- हॉट इनो डीबी बैकअप बनाएं, जो आपके डेटाबेस को रोके बिना या सर्वर पर लोड जोड़े बिना जल्दी और विश्वसनीय रूप से पूरा करें
- बढ़ते बैकअप बनाएं
- ऑनलाइन MySQL सर्वर के बीच तालिकाओं को स्थानांतरित करें
- आसानी से नए MySQL प्रतिकृति स्लेव बनाएं
- संपीड़ित MySQL बैकअप को दूसरे सर्वर पर स्ट्रीम करें
- डिस्क स्थान और नेटवर्क बैंडविड्थ पर सहेजें
मारियाबैकअप क्या है?
मारियाबैकअप एक खुला स्रोत उपकरण है जो मारियाडीबी द्वारा भौतिक ऑनलाइन बैकअप करने के लिए प्रदान किया गया है। यह Percona XtraBackup का एक कांटा है जिसे एन्क्रिप्टेड और संपीड़ित तालिकाओं के साथ काम करने के लिए डिज़ाइन किया गया है, और यह MariaDB डेटाबेस के लिए अनुशंसित बैकअप विधि है।
मारियाडीबी सर्वर 10.1 ने मारियाडीबी संपीड़न और डेटा-एट-रेस्ट एन्क्रिप्शन की शुरुआत की, लेकिन मौजूदा बैकअप समाधान इन सुविधाओं के लिए पूर्ण बैकअप क्षमता का समर्थन नहीं करते थे। इसलिए MariaDB ने XtraBackup (संस्करण 2.3.8) का विस्तार करने का निर्णय लिया और इस समाधान का नाम Mariabackup रखा।
पेरकोना एक्स्ट्राबैकअप और मारियाबैकअप के बीच अंतर
जैसा कि हमने पहले उल्लेख किया है, मारियाबैकअप, मारियाडीबी के लिए अनुशंसित बैकअप उपकरण है, और एक्स्ट्राबैकअप से मुख्य अंतर यह है कि यह एन्क्रिप्टेड और संपीड़ित तालिकाओं के साथ काम करता है।
वैसे भी, यदि किसी विशेष कारण से आप अपने MariaDB डेटाबेस के लिए XtraBackup का उपयोग करना चाहते हैं, तो आपके पास मौजूद MariaDB सर्वर संस्करण के आधार पर कुछ बातों का ध्यान रखना चाहिए:
- MariaDB 10.1:असंपीड़ित और अनएन्क्रिप्टेड MariaDB डेटा के साथ, आप XtraBackup का उपयोग कर सकते हैं। यदि एन्क्रिप्शन या संपीड़न का उपयोग किया जाता है, या जब innodb_page_size को 16K के अलावा किसी अन्य मान पर सेट किया जाता है तो यह काम नहीं करेगा।
- MariaDB 10.2:आप XtraBackup का उपयोग करने का भी प्रयास कर सकते हैं, लेकिन ध्यान रखें कि समस्याएँ MySQL 5.7 पूर्ववत लॉग प्रारूप असंगति बग के कारण होने की संभावना है जिसे MariaDB 10.2.2 में ठीक किया गया था। इस बग के कारण, XtraBackup के साथ तैयार किए गए बैकअप कुछ लेनदेन को पुनर्प्राप्त करने में विफल हो सकते हैं। केवल अगर आप सर्वर को innodb_undo_logs=1 सेटिंग के साथ चलाते हैं तो यह कोई समस्या नहीं होगी।
- MariaDB 10.3 और बाद के संस्करण:यह मामला अधिक सरल है। एक्स्ट्रा बैकअप संगत नहीं है।
साथ ही, मारियाबैकअप का उपयोग करते समय ध्यान रखने योग्य कुछ सीमाएं हैं:
- MyRocks:MariaDB 10.2.16 और MariaDB 10.3.8 से शुरू होकर, Mariabackup MyRocks Storage Engine डेटा का बैकअप लेगा। MyRocks डेटा का आंशिक बैकअप वर्तमान में समर्थित नहीं है। इंक्रीमेंटल बैकअप MyRocks डेटा की पूरी कॉपी स्टोर करेगा।
- निर्यात फ़ाइल कार्यक्षमता:मारियाडीबी 10.2.9 से पहले, मारियाबैकअप --export कार्यक्षमता का समर्थन नहीं करता था (यह डेटाबेस से डेटा निर्यात करने के लिए एक निर्यात फ़ाइल बनाता है)। आप हमेशा की तरह (बिना --export ध्वज के) बैकअप तैयार करके इस सीमा को हल कर सकते हैं, फिर सर्वर शुरू करें और निर्यात के लिए फ्लश टेबल निष्पादित करें।
- लॉग फ़ाइलें:10.2.8 तक मारियाबैकअप संस्करण खाली लॉग फ़ाइलें नहीं बनाते हैं और उपयोगकर्ता द्वारा निष्पादित --कॉपी-बैक क्रिया पर निर्भर करते हैं (जो पुरानी innodb लॉग फ़ाइलों को हटा देता है, यदि कोई हो)। यदि उपयोगकर्ता --copy-back का उपयोग नहीं करता है या यह सुनिश्चित करता है कि पुनर्स्थापित करने से पहले डेटा निर्देशिका खाली है, तो इन संस्करणों के साथ बनाए गए बैकअप असंगत/दूषित हो सकते हैं (बचे हुए InnoDB लॉग की उपस्थिति के कारण)।
- Gcrypt:मारियाबैकअप पर बैकअप टूल आधारित एन्क्रिप्शन (gcrypt) समर्थित नहीं है।
- Innobackupex विकल्प:innobackupex के लिए कोई सिमलिंक नहीं (इसके बजाय --innobackupex पैरामीटर का उपयोग करें)। Innobackupex टूल पैच करता है और InnoDB और MyISAM टेबल के बैकअप के लिए इनोबैकअप टूल पर अतिरिक्त सुविधाएँ प्रदान करता है।
- कॉम्पैक्ट विकल्प:--कॉम्पैक्ट विकल्प समर्थित नहीं है।
- पुनर्निर्माण अनुक्रमणिका विकल्प:--rebuild_indexes विकल्प समर्थित नहीं है।
- बैकअप फ़ाइलों के लिए टैर:मारियाबैकअप 10.1.24 में --stream=tar के लिए समर्थन हटा दिया गया था (--streams विकल्प बैकअप फ़ाइलों को stdout में स्ट्रीम करता है)।
अंत में, लेकिन कम से कम नहीं, मारियाबैकअप को विंडोज़ पर स्थापित किया जा सकता है।
बैकअप प्रक्रिया पुनर्स्थापित प्रक्रियाकैसे करें - Percona XtraBackup and Mariabackup
आइए देखें कि हम इसे कैसे स्थापित और उपयोग कर सकते हैं।
इंस्टॉलेशन
XtraBackup और Mariabackup दोनों को स्थापित करने के लिए आपके पास अलग-अलग तरीके हैं। आइए रिपॉजिटरी से इंस्टॉलेशन का प्रयास करें।
अतिरिक्त बैकअप स्थापना
डेबियन/उबंटू पर
$ wget https://repo.percona.com/apt/percona-release_0.1-6.$(lsb_release -sc)_all.deb
$ sudo dpkg -i percona-release_0.1-6.$(lsb_release -sc)_all.deb
$ sudo apt-get update
$ sudo apt-get install percona-xtrabackup-24
RedHat/CentOS पर
$ sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm
$ sudo yum install percona-xtrabackup-24
मारियाबैकअप इंस्टालेशन
डेबियन/उबंटू पर
मारियाबैकअप मारियाडीबी 10.1.23 से शुरू होने वाले मारियाडीबी सर्वर का हिस्सा है।
$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
$ sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.1/ubuntu bionic main'
$ sudo apt-get update
$ sudo apt-get install mariadb-server-10.1
CentOS / RedHat पर
$ sudo vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name=MariaDB
baseurl=http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
$ sudo yum install MariaDB-backup
कॉन्फ़िगरेशन
Xtrabackup और Mariabackup दोनों उस क्रम में किसी भी MySQL कॉन्फ़िगरेशन फ़ाइल के [mysqld] और [xtrabackup] अनुभागों को पढ़ते हैं। इस तरह, यह MySQL के मापदंडों को पढ़ सकता है, जैसे डेटादिर या इनोडीबी पैरामीटर।
हम [mysqld] अनुभाग में शामिल मापदंडों को [xtrabackup] में उनके मान को संशोधित करके संशोधित कर सकते हैं, जैसा कि हमने पहले उल्लेख किया है, वे क्रम में पढ़े जाते हैं, इसलिए [xtrabackup] में हमारे पास जो आखिरी चीज है, उसकी प्राथमिकता होगी।
[mysqld]
datadir=/data/datadir
[xtrabackup]
target_dir=/backups/
पूर्ण बैकअप के लिए आवश्यक न्यूनतम विशेषाधिकार वाले उपयोगकर्ता रीलोड, लॉक टेबल, प्रक्रिया और प्रतिकृति क्लाइंट होंगे:
mysql> CREATE USER 'backupuser'@'localhost' IDENTIFIED BY 'Password';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'backupuser'@'localhost';
और फिर, आप इस उपयोगकर्ता को MySQL कॉन्फ़िगरेशन फ़ाइलों में जोड़ सकते हैं:
[xtrabackup]
user=backupuser
password=Password
साथ ही, जब आप Percona XtraDB क्लस्टर या MariaDB Galera क्लस्टर का उपयोग कर रहे हों, तब आप स्टेट स्नैपशॉट ट्रांसफर करने के लिए Xtrabackup या Mariabackup का उपयोग कर सकते हैं। आपको कॉन्फ़िगरेशन फ़ाइलों में wsrep_sst_method और wsrep_sst_auth चर सेट करने होंगे:
[mysqld]
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=backupuser:Password
या
[mysqld]
wsrep_sst_method=mariabackup
wsrep_sst_auth=backupuser:Password
उपयोग
चूंकि मारियाबैकअप एक्स्ट्राबैकअप पर आधारित है, इसलिए इसे इसी तरह इस्तेमाल किया जा सकता है।
अब एक पूर्ण बैकअप बनाने, तैयार करने और पुनर्स्थापित करने के लिए दोनों विधियों का उपयोग करके एक उदाहरण देखते हैं।
बैकअप बनाना
XtraBackup या Mariabackup के साथ एक नया बैकअप बनाने के लिए, आपको कमांड लाइन में --backup और --target-dir विकल्प जोड़ने होंगे:
$ xtrabackup --backup --target-dir=/backups/
या
$ mariabackup --backup --target-dir=/backups/
लक्ष्य डीआईआर, जहां बैकअप संग्रहीत किया जाएगा, को MySQL कॉन्फ़िगरेशन फ़ाइलों में निर्दिष्ट किया जा सकता है। बैकअप प्रक्रिया मौजूदा फ़ाइलों को अधिलेखित नहीं करेगी। यदि फ़ाइल मौजूद है तो बैकअप विफल हो जाएगा।
Transaction log of lsn (9755450) to (9755467) was copied.
181122 23:02:44 completed OK!
यदि सब कुछ ठीक रहा, तो आपको जो अंतिम पंक्ति दिखाई दे रही है वह "पूर्ण ठीक है!" होनी चाहिए। आप किसी भी समय बैकअप रद्द कर सकते हैं, क्योंकि यह डेटाबेस की सामग्री को संशोधित नहीं करता है।
[[email protected] ~]# ls -l /backups/
total 102448
-rw-r----- 1 root root 488 Nov 22 23:02 backup-my.cnf
-rw-r----- 1 root root 482 Nov 22 23:02 ib_buffer_pool
-rw-r----- 1 root root 104857600 Nov 22 23:02 ibdata1
drwxr-x--- 2 root root 4096 Nov 22 23:02 mysql
drwxr-x--- 2 root root 4096 Nov 22 23:02 performance_schema
drwxr-x--- 2 root root 4096 Nov 22 23:02 sakila
drwxr-x--- 2 root root 12288 Nov 22 23:02 sys
-rw-r----- 1 root root 64 Nov 22 23:02 xtrabackup_binlog_info
-rw-r----- 1 root root 113 Nov 22 23:02 xtrabackup_checkpoints
-rw-r----- 1 root root 533 Nov 22 23:02 xtrabackup_info
-rw-r----- 1 root root 2560 Nov 22 23:02 xtrabackup_logfile
यह आपके बैकअप की सामग्री होनी चाहिए। यह आपके डेटाबेस के आधार पर बदल सकता है।
बैकअप तैयार करना
जब आप एक्स्ट्राबैकअप या मारियाबैकअप के साथ अपना बैकअप बना लेते हैं, तो आपको इसे पुनर्स्थापित करने के लिए तैयार करने की आवश्यकता होती है। डेटा फ़ाइलें तैयार होने तक संगत नहीं होती हैं, क्योंकि बैकअप की अवधि के दौरान उन्हें अलग-अलग समय पर कॉपी किया गया था। यदि आप इसे पुनर्स्थापित करने और अपना डेटाबेस प्रारंभ करने का प्रयास करते हैं, तो यह भ्रष्टाचार का पता लगाएगा और आपको असंगत डेटा पर चलने से रोकने के लिए स्वयं क्रैश हो जाएगा।
बैकअप तैयार करने के लिए, आपको --prepare विकल्प के साथ xtrabackup या mariabackup कमांड चलाने की जरूरत है और लक्ष्य डीआईआर निर्दिष्ट करें जहां बैकअप संग्रहीत है।
$ xtrabackup --prepare --target-dir=/backups/
या
$ mariabackup --prepare --target-dir=/backups/
InnoDB: Shutdown completed; log sequence number 9757224
181122 23:05:29 completed OK!
अंतिम पंक्ति जो आप देख रहे हैं वह होनी चाहिए "शटडाउन पूर्ण; लॉग अनुक्रम संख्या xxxxxxx" और "पूर्ण ठीक!" अगर सब ठीक हो गया। तैयारी प्रक्रिया को रद्द करने की अनुशंसा नहीं की जाती है क्योंकि इससे डेटा फ़ाइल दूषित हो सकती है और बैकअप अनुपयोगी हो जाएगा।
यदि आप इस बैकअप को बाद में एक वृद्धिशील बैकअप के साथ उपयोग करना चाहते हैं, तो आपको इसे तैयार करते समय --apply-log-only विकल्प का उपयोग करना चाहिए, या आप इसे करने में सक्षम नहीं होंगे।
बैकअप बहाल करना
बैकअप तैयार करने के बाद, आप डेटादिर में बैकअप को कॉपी या स्थानांतरित करने के लिए पैरामीटर --कॉपी-बैक या --मूव-बैक के साथ पुनर्स्थापना विकल्प का उपयोग कर सकते हैं। यदि आपके पास पर्याप्त डिस्क स्थान नहीं है, तो आपको संभवतः मूव विकल्प का उपयोग करना चाहिए। साथ ही, हमें उस लक्ष्य dir को निर्दिष्ट करने की आवश्यकता है जहां बैकअप संग्रहीत है। ध्यान रखें कि बैकअप को पुनर्स्थापित करने से पहले डेटादिर खाली होना चाहिए और डेटाबेस सेवा डाउन होनी चाहिए।
$ xtrabackup --copy-back --target-dir=/backups/
या
$ mariabackup --copy-back --target-dir=/backups/
यह सबसे पहले MyISAM टेबल और इंडेक्स, InnoDB टेबल और इंडेक्स को कॉपी/स्थानांतरित करेगा और अंत में लॉग फाइल करेगा। यह फ़ाइल की विशेषताओं को कॉपी करते समय संरक्षित करेगा, डेटाबेस सर्वर शुरू करने से पहले आपको फ़ाइलों के स्वामित्व को mysql में बदलना पड़ सकता है, क्योंकि वे बैकअप बनाने वाले उपयोगकर्ता के स्वामित्व में होंगे।
$ sudo chown -R mysql:mysql /var/lib/mysql
Xtrabackup और Mariabackup के साथ उपयोग करने के लिए कई पैरामीटर हैं। आप इन मापदंडों को यहां एक्स्ट्राबैकअप के लिए और मारियाबैकअप के लिए यहां देख सकते हैं।
आपके संपूर्ण डेटाबेस इन्फ्रास्ट्रक्चर के लिए ClusterControlSingle कंसोल पता करें कि ClusterControl में और क्या नया है, ClusterControl को निःशुल्क स्थापित करेंClusterControl पर अपने बैकअप प्रबंधित करना
जैसा कि हमने ऊपर देखा, बैकअप चलाना कोई रॉकेट साइंस नहीं है। इसे क्रॉन के साथ भी शेड्यूल किया जा सकता है (लेकिन मूक विफलताओं से सावधान रहें!) हालांकि, नियमित रूप से बैकअप बनाने की स्क्रिप्ट बैकअप प्रबंधन समाधान नहीं है। आपको अपने बैकअप पर रिपोर्ट करने और विफलताओं पर अलर्ट करने का एक तरीका चाहिए। अब, अपने परिवेश में बैकअप को कॉन्फ़िगर करना और बैकअप को बिना त्रुटि के काम करते देखना इसका मतलब यह नहीं है कि सब कुछ अच्छा है। आपने श्रोडिंगर के बैकअप के बारे में सुना होगा, जिसमें कहा गया है कि किसी भी बैकअप की स्थिति तब तक अज्ञात है जब तक कि पुनर्स्थापना का प्रयास नहीं किया जाता है। क्योंकि इससे भी बुरी चीज जो हो सकती है वह एक आपदा है और आपको पता चलता है कि बैकअप किसी कारण से गलत हैं। आप उन फ़ाइलों को पुनर्स्थापित करने का प्रयास करते हैं जिनका बैकअप लिया गया था, और जो आपको लगता है कि आपने बैकअप लिया है, उसे पुनर्स्थापित नहीं करता है, या यह बिल्कुल भी पुनर्स्थापित नहीं करता है! फिर बैकअप फ़ाइलों को ऑफ़साइट ले जाने जैसी चीज़ें हैं, उदा। बाहरी क्लाउड स्टोरेज के लिए, आपदा वसूली के लिए। एन्क्रिप्शन और चाबियों का संचालन सुरक्षा के लिए महत्वपूर्ण है। स्थानीय के साथ-साथ बाहरी/संग्रहीत बैकअप को भी प्रबंधित करने की आवश्यकता है।
आइए देखें कि ClusterControl कैसे मदद कर सकता है।
यदि आप ClusterControl बैकअप सुविधा का उपयोग करना चाहते हैं, तो ClusterControl पर जाएँ -> क्लस्टर चुनें -> बैकअप, और वहाँ आप अपने वर्तमान बैकअप देख सकते हैं, एक नया बना सकते हैं या शेड्यूल कर सकते हैं।
ClusterControl बैकअप अनुभागक्रिएट या शेड्यूल विकल्प का उपयोग करके, हम एक्स्ट्राबैकअप या मारियाबैकअप विधि दोनों को चुन सकते हैं। उसी अनुभाग में, हम उस सर्वर को चुन सकते हैं जिससे बैकअप लेना है, आंशिक बैकअप सक्षम करना है, यह चुन सकते हैं कि आप बैकअप कहाँ संग्रहीत करना चाहते हैं और यदि आप बैकअप को क्लाउड (AWS, Azure या Google क्लाउड) पर अपलोड करना चाहते हैं।पी> ClusterControl बैकअप बनाएं 1
फिर, हम संपीड़न, एन्क्रिप्शन और अवधारण जैसे बैकअप पैरामीटर चुन सकते हैं।
ClusterControl बैकअप 2 बनाएंऔर ये वो कमांड होनी चाहिए जो ClusterControl आपके लिए चलाएगी:
[16:37:58]: 192.168.100.120: Launching ( LC_ALL=C /usr/bin/innobackupex --defaults-file=/etc/my.cnf --galera-info --parallel 1 --stream=xbstream --no-timestamp . | gzip -6 - > /root/backups/BACKUP-13/backup-full-2018-11-14_193757.xbstream.gz ) 2>&1.
या
[16:29:57]: 192.168.100.131: Launching ( LC_ALL=C /usr/bin/mariabackup --defaults-file=/etc/my.cnf --backup --galera-info --parallel 1 --stream=xbstream --no-timestamp | gzip -6 - > /root/backups/BACKUP-11/backup-full-2018-11-14_192957.xbstream.gz ) 2>&1.
आपके द्वारा चुने गए पैरामीटर के आधार पर यह आदेश भिन्न हो सकता है।
जैसा कि हम देख सकते हैं, अगर हम एक्स्ट्राबैकअप या मारियाबैकअप का उपयोग करना चाहते हैं तो क्लस्टर कंट्रोल एक अच्छा दोस्त है। हम ClusterControl UI से विकल्पों का चयन करके जटिल बैकअप कमांड को आसान तरीके से चला सकते हैं।
निष्कर्ष
मारियाडीबी सर्वर का बैकअप लेते समय, मारियाबैकअप टूल का उपयोग करने की अनुशंसा की जाती है। हालाँकि, यदि किसी कारण से आप XtraBackup का उपयोग करना पसंद करते हैं, तो भी आप कर सकते हैं। लेकिन आपको लागू होने वाले प्रतिबंधों को ध्यान में रखना होगा, जैसा कि हमने इस ब्लॉग में नोट किया है। और अंत में, हमने चर्चा की कि कैसे एक डेटाबेस का बैकअप लेने के लिए एक स्क्रिप्ट एक बैकअप प्रबंधन समाधान के समान नहीं है, और ClusterControl पर एक त्वरित नज़र डाली।
हमें बताएं कि क्या हम एक्स्ट्राबैकअप और मारियाबैकअप के बीच कोई अंतर चूक गए हैं।
गैर-अवरुद्ध बैकअप InnoDB, XtraDB, और HailDB स्टोरेज इंजन के लिए समर्थित हैं। बैकअप के अंत में लिखने को संक्षिप्त रूप से रोककर निम्नलिखित स्टोरेज इंजन का बैकअप लिया जा सकता है:MyISAM, मर्ज और आर्काइव, जिसमें विभाजित टेबल, ट्रिगर और डेटाबेस विकल्प शामिल हैं।