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

Oracle DBA के लिए MySQL बैकअप कैसे निष्पादित और प्रबंधित करें?

Oracle डेटाबेस से ओपन सोर्स में माइग्रेट करने से कई लाभ हो सकते हैं। स्वामित्व की कम लागत आकर्षक है, और बहुत सी कंपनियों को पलायन करने के लिए प्रेरित करती है। उसी समय DevOps, SysOps या DBA को व्यावसायिक आवश्यकताओं को पूरा करने के लिए SLA को सख्त रखने की आवश्यकता है।

जब आप किसी अन्य डेटाबेस में डेटा माइग्रेशन की योजना बनाते हैं, तो प्रमुख चिंताओं में से एक, विशेष रूप से ओपन सोर्स यह है कि डेटा हानि से कैसे बचा जाए। यह बहुत दूर की बात नहीं है कि किसी ने गलती से डेटाबेस का हिस्सा हटा दिया, कोई DELETE क्वेरी में WHERE क्लॉज शामिल करना भूल गया या गलती से DROP TABLE चला गया। सवाल यह है कि ऐसी स्थितियों से कैसे उबरा जाए।

ऐसी चीजें हो सकती हैं और होंगी, यह अपरिहार्य है लेकिन प्रभाव विनाशकारी हो सकता है। जैसा कि किसी ने कहा, "बैकअप विफल होने तक यह सब मज़ेदार और खेल है"। सबसे मूल्यवान संपत्ति से समझौता नहीं किया जा सकता है। अवधि।

यदि आप नई तकनीक से परिचित नहीं हैं तो अज्ञात का भय स्वाभाविक है। वास्तव में, Oracle डेटाबेस समाधानों का ज्ञान, विश्वसनीयता और महान सुविधाएँ जो Oracle रिकवरी मैनेजर (RMAN) प्रदान करता है, आपको या आपकी टीम को एक नए डेटाबेस सिस्टम में माइग्रेट करने के लिए हतोत्साहित कर सकता है। हम उन चीज़ों का उपयोग करना पसंद करते हैं जिन्हें हम जानते हैं, इसलिए जब हमारा वर्तमान समाधान काम करता है तो माइग्रेट क्यों करें। कौन जानता है कि कितनी परियोजनाओं को रोक दिया गया था क्योंकि टीम या व्यक्ति नई तकनीक के बारे में आश्वस्त नहीं थे?

लॉजिकल बैकअप (exp/imp, expdp/impdb)

MySQL प्रलेखन के अनुसार, तार्किक बैकअप "एक बैकअप है जो वास्तविक डेटा फ़ाइलों की प्रतिलिपि किए बिना तालिका संरचना और डेटा को पुन:उत्पन्न करता है।" यह परिभाषा MySQL और Oracle दोनों दुनियाओं पर लागू हो सकती है। वही "क्यों" और "कब" है कि आप तार्किक बैकअप का उपयोग करेंगे।

तार्किक बैकअप एक अच्छा विकल्प है जब हम जानते हैं कि कौन सा डेटा संशोधित किया जाएगा ताकि आप केवल उस हिस्से का बैकअप ले सकें जिसकी आपको आवश्यकता है। यह समय और जटिलता के संदर्भ में संभावित पुनर्स्थापना को सरल बनाता है। यह बहुत उपयोगी है अगर हमें छोटे / मध्यम आकार के डेटा सेट के कुछ हिस्से को स्थानांतरित करने और किसी अन्य सिस्टम (अक्सर एक अलग डेटाबेस संस्करण पर) की प्रतिलिपि बनाने की आवश्यकता होती है। Oracle डेटाबेस डेटा को पढ़ने के लिए exp और expdp जैसी निर्यात उपयोगिताओं का उपयोग करता है और फिर इसे ऑपरेटिंग सिस्टम स्तर पर एक फ़ाइल में निर्यात करता है। फिर आप आयात उपयोगिताओं imp या impdp का उपयोग करके डेटा को वापस डेटाबेस में आयात कर सकते हैं।

ओरेकल एक्सपोर्ट यूटिलिटीज हमें यह चुनने के लिए बहुत सारे विकल्प देती है कि कौन सा डेटा निर्यात किया जाना चाहिए। आपको निश्चित रूप से mysql के साथ समान संख्या में सुविधाएँ नहीं मिलेंगी, लेकिन अधिकांश ज़रूरतों को पूरा किया जाता है और बाकी को अतिरिक्त स्क्रिप्टिंग या बाहरी टूल (चेक mydumper) के साथ किया जा सकता है।

MySQL उपकरणों के एक पैकेज के साथ आता है जो बहुत ही बुनियादी कार्यक्षमता प्रदान करता है। वे हैं mysqldump, mysqlpump (mysqldump का आधुनिक संस्करण जिसमें समानांतरीकरण के लिए मूल समर्थन है) और MySQL क्लाइंट जिनका उपयोग एक फ्लैट फ़ाइल में डेटा निकालने के लिए किया जा सकता है।

नीचे आप उनका उपयोग करने के कई उदाहरण पा सकते हैं:

केवल बैकअप डेटाबेस संरचना

mysqldump --no-data -h localhost -u root -ppassword mydatabase > mydatabase_backup.sql

बैकअप तालिका संरचना

mysqldump --no-data --single- transaction -h localhost -u root -ppassword mydatabase table1 table2 > mydatabase_backup.sql

विशिष्ट पंक्तियों का बैकअप लें

mysqldump -h localhost --single- transaction -u root -ppassword mydatabase table_name --where="date_created='2019-05-07'" > table_with_specific_rows_dump.sql

तालिका आयात करना

mysql -u username -p -D dbname < tableName.sql

यदि कोई त्रुटि होती है तो उपरोक्त आदेश लोड करना बंद कर देगा।

यदि आप सीधे mysql क्लाइंट से डेटा लोड करते हैं, तो त्रुटियों को अनदेखा कर दिया जाएगा और क्लाइंट आगे बढ़ेगा

mysql> source tableName.sql

आउटपुट लॉग करने के लिए, आपको उपयोग करने की आवश्यकता है

mysql> tee import_tableName.log

आप नीचे दिए गए लिंक के तहत समझाए गए सभी झंडे पा सकते हैं:

  • https://dev.mysql.com/doc/refman/8.0/hi/mysqldump.html
  • https://dev.mysql.com/doc/refman/8.0/hi/mysqlimport.html
  • https://dev.mysql.com/doc/refman/8.0/en/mysql.html

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

USE mydatabase;
SELECT @@character_set_database, @@collation_database;

Collation_database सिस्टम वैरिएबल को पुनः प्राप्त करने का दूसरा तरीका SHOW VARIABLES का उपयोग करना है।

SHOW VARIABLES LIKE 'collation%';

mysql डंप की सीमाओं के कारण, हमें अक्सर आउटपुट को संशोधित करना पड़ता है। इस तरह के संशोधन का एक उदाहरण कुछ पंक्तियों को हटाने की आवश्यकता हो सकती है। सौभाग्य से, हमारे पास पुनर्स्थापित करने से पहले मानक टेक्स्ट टूल का उपयोग करके आउटपुट को देखने और संशोधित करने का लचीलापन है। awk, grep, sed जैसे टूल आपके दोस्त बन सकते हैं। डंप फ़ाइल से तीसरी पंक्ति को कैसे हटाया जाए, इसका एक सरल उदाहरण नीचे दिया गया है।

sed -i '1,3d' file.txt

संभावनाएं अनंत हैं। यह कुछ ऐसा है जो हम Oracle के साथ नहीं पाएंगे क्योंकि डेटा बाइनरी प्रारूप में लिखा जाता है।

जब आप तार्किक MySQL निष्पादित करते हैं तो आपको कुछ बातों पर विचार करने की आवश्यकता होती है। मुख्य सीमाओं में से एक समानांतरवाद और ऑब्जेक्ट लॉकिंग का शुद्ध समर्थन है।

तार्किक बैकअप विचार

जब इस तरह के बैकअप को निष्पादित किया जाता है, तो निम्न चरणों का पालन किया जाएगा।

  • लॉक टेबल टेबल।
  • तालिका बनाएं दिखाएं।
  • चुनें * टेबल से आउटफाइल अस्थायी फ़ाइल में।
  • डंप फ़ाइल के अंत तक अस्थायी फ़ाइल की सामग्री लिखें।
  • टेबल अनलॉक करें

डिफ़ॉल्ट रूप से mysqldump इसके आउटपुट में रूटीन और ईवेंट शामिल नहीं करता है - आपको स्पष्ट रूप से --routines और --events फ़्लैग सेट करने होंगे।

एक अन्य महत्वपूर्ण विचार एक इंजन है जिसका उपयोग आप अपने डेटा को संग्रहीत करने के लिए करते हैं। उम्मीद है कि इन दिनों अधिकांश प्रोडक्शन सिस्टम इनो डीबी नामक एसीआईडी ​​​​अनुपालन इंजन का उपयोग करते हैं। पुराने इंजन MyISAM को निरंतरता सुनिश्चित करने के लिए सभी तालिकाओं को लॉक करना पड़ा। यह तब है जब रीड लॉक के साथ फ्लश टेबल को निष्पादित किया गया था। दुर्भाग्य से, यह MyISAM तालिकाओं के एक सुसंगत स्नैपशॉट की गारंटी देने का एकमात्र तरीका है, जबकि MySQL सर्वर चल रहा है। यह MySQL सर्वर को UNLOCK TABLES निष्पादित होने तक केवल पढ़ने के लिए बना देगा।

InnoDB स्टोरेज इंजन पर तालिकाओं के लिए, --single-Transaction विकल्प का उपयोग करने की अनुशंसा की जाती है। MySQL तब एक चेकपॉइंट बनाता है जो आने वाले परिवर्तनों को प्राप्त करते समय डंप को चेकपॉइंट से पहले सभी डेटा को कैप्चर करने की अनुमति देता है।

Mysqldump का --single-transaction विकल्प फ्लश टेबल को रीड लॉक के साथ नहीं करता है। यह mysqldump को सभी तालिकाओं को डंप करने के लिए एक दोहराए जाने योग्य रीड लेनदेन सेट करने का कारण बनता है।

एक mysqldump बैकअप Oracle टूल क्स्प, expdp की तुलना में बहुत धीमा है। Mysqldump एक सिंगल-थ्रेडेड टूल है और यह इसकी सबसे महत्वपूर्ण कमी है - छोटे डेटाबेस के लिए प्रदर्शन ठीक है लेकिन अगर डेटा सेट दसियों गीगाबाइट तक बढ़ जाता है तो यह जल्दी अस्वीकार्य हो जाता है।

  • लगातार स्नैपशॉट के साथ लेन-देन शुरू करें।
  • प्रत्येक डेटाबेस स्कीमा और तालिका के लिए, एक डंप इन चरणों को पूरा करता है:
    • तालिका बनाएं दिखाएं।
    • चुनें * टेबल से आउटफाइल अस्थायी फ़ाइल में।
    • डंप फ़ाइल के अंत तक अस्थायी फ़ाइल की सामग्री लिखें।
  • कमिट करें।

भौतिक बैकअप (RMAN)

सौभाग्य से, तार्किक बैकअप की अधिकांश सीमाओं को Percona Xtrabackup टूल से हल किया जा सकता है। Percona XtraBackup सबसे लोकप्रिय, ओपन-सोर्स, MySQL/MariaDB हॉट बैकअप सॉफ्टवेयर है जो InnoDB और XtraDB डेटाबेस के लिए नॉन-ब्लॉकिंग बैकअप करता है। यह भौतिक बैकअप श्रेणी में आता है, जिसमें MySQL डेटा निर्देशिका की सटीक प्रतियां और इसके नीचे की फ़ाइलें शामिल हैं।

यह Oracle RMAN जैसे टूल की एक ही श्रेणी है। RMAN डेटाबेस सॉफ्टवेयर के हिस्से के रूप में आता है, XtraBackup को अलग से डाउनलोड करने की आवश्यकता होती है। Xtrabackup rpm और deb पैकेज के रूप में उपलब्ध है और केवल Linux प्लेटफॉर्म का समर्थन करता है। स्थापना बहुत सरल है:

$ wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-8.0.4/binary/redhat/7/x86_64/percona-XtraBackup-80-8.0.4-1.el7.x86_64.rpm
$ yum localinstall percona-XtraBackup-80-8.0.4-1.el7.x86_64.rpm

बैकअप प्रक्रिया के दौरान XtraBackup आपके डेटाबेस को लॉक नहीं करता है। बड़े डेटाबेस (100+ GB) के लिए, यह mysqldump की तुलना में बहुत बेहतर पुनर्स्थापना समय प्रदान करता है। पुनर्स्थापना प्रक्रिया में लक्ष्य नोड पर वर्तमान डेटा निर्देशिका के साथ बदलने या स्विच करने से पहले, बैकअप फ़ाइलों से MySQL डेटा तैयार करना शामिल है।

Percona XtraBackup शुरू होने पर लॉग अनुक्रम संख्या (LSN) को याद करके और फिर डेटा फ़ाइलों को किसी अन्य स्थान पर कॉपी करके काम करता है। डेटा की प्रतिलिपि बनाने में कुछ समय लगता है, और यदि फ़ाइलें बदल रही हैं, तो वे समय के विभिन्न बिंदुओं पर डेटाबेस की स्थिति को दर्शाती हैं। उसी समय, XtraBackup एक पृष्ठभूमि प्रक्रिया चलाता है जो लेन-देन लॉग (उर्फ रीडो लॉग) फ़ाइलों पर नज़र रखता है, और उसमें से परिवर्तनों की प्रतिलिपि बनाता है। यह लगातार किया जाना चाहिए क्योंकि लेन-देन लॉग एक राउंड-रॉबिन फैशन में लिखे गए हैं, और थोड़ी देर के बाद पुन:उपयोग किए जा सकते हैं। XtraBackup को निष्पादन शुरू होने के बाद से डेटा फ़ाइलों में प्रत्येक परिवर्तन के लिए लेन-देन लॉग रिकॉर्ड की आवश्यकता है।

जब XtraBackup इंस्टाल हो जाता है तो आप अंततः अपना पहला भौतिक बैकअप कर सकते हैं।

xtrabackup --user=root --password=PASSWORD --backup --target-dir=/u01/backups/

एक अन्य उपयोगी विकल्प जो MySQL व्यवस्थापक करते हैं, वह है किसी अन्य सर्वर पर बैकअप की स्ट्रीमिंग। इस तरह की स्ट्रीम xbstream टूल के उपयोग से की जा सकती है, जैसे नीचे दिए गए उदाहरण में:

बेहतर पोर्ट पर बाहरी सर्वर पर श्रोता प्रारंभ करें (इस उदाहरण 1984 में)

nc -l 1984 | pigz -cd - | pv | xbstream -x -C /u01/backups

बैकअप चलाएँ और बाहरी होस्ट को स्थानांतरित करें

innobackupex --user=root --password=PASSWORD --stream=xbstream /var/tmp | pigz  | pv | nc external_host.com 1984

जैसा कि आप देख सकते हैं कि पुनर्स्थापना प्रक्रिया दो प्रमुख चरणों (ओरेकल के समान) में विभाजित है। चरणों को पुनर्स्थापित किया जाता है (वापस कॉपी करें) और पुनर्प्राप्ति (लॉग लागू करें)।

XtraBackup --copy-back --target-dir=/var/lib/data
innobackupex --apply-log --use-memory=[values in MB or GB] /var/lib/data

अंतर यह है कि हम केवल उस बिंदु तक पुनर्प्राप्ति कर सकते हैं जब बैकअप लिया गया था। बैकअप के बाद परिवर्तन लागू करने के लिए हमें इसे मैन्युअल रूप से करने की आवश्यकता है।

प्वाइंट इन टाइम रिस्टोर (RMAN रिकवरी)

जब हम डेटाबेस की पुनर्प्राप्ति करते हैं तो Oracle में, RMAN सभी चरण करता है। यह या तो एससीएन या समय या बैकअप डेटा सेट के आधार पर किया जा सकता है।

RMAN> run
{
allocate channel dev1 type disk;
set until time "to_date('2019-05-07:00:00:00', 'yyyy-mm-dd:hh24:mi:ss')";
restore database;
recover database; }

Mysql में, हमें बाइनरी लॉग (Oracle के आर्काइवलॉग के समान) mysqlbinlog से डेटा निकालने के लिए प्रदर्शन करने के लिए एक और टूल की आवश्यकता होती है। mysqlbinlog बाइनरी लॉग को पढ़ सकता है और उन्हें फाइलों में बदल सकता है। हमें क्या करना है

मूल प्रक्रिया होगी

  • पूर्ण बैकअप पुनर्स्थापित करें
  • वृद्धिशील बैकअप पुनर्स्थापित करें
  • पुनर्प्राप्ति के लिए प्रारंभ और समाप्ति समय की पहचान करने के लिए (जो कि बैकअप का अंत और दुर्भाग्य से ड्रॉप टेबल से पहले की स्थिति संख्या हो सकती है)।
  • आवश्यक binglogs को SQL में बदलें और नई बनाई गई SQL फ़ाइलों को उचित क्रम में लागू करें - एक mysqlbinlog कमांड चलाना सुनिश्चित करें।
    > mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p

बैकअप एन्क्रिप्ट करें (Oracle Wallet)

Percona XtraBackup का उपयोग स्थानीय या स्ट्रीमिंग बैकअप को एन्क्रिप्ट या डिक्रिप्ट करने के लिए xbstream विकल्प के साथ बैकअप में सुरक्षा की एक और परत जोड़ने के लिए किया जा सकता है। एन्क्रिप्शन कुंजी निर्दिष्ट करने के लिए --encrypt-key विकल्प और --encryptkey-file विकल्प दोनों का उपयोग किया जा सकता है। एन्क्रिप्शन कुंजियाँ

. जैसे आदेशों के साथ उत्पन्न की जा सकती हैं
$ openssl rand -base64 24
$ bWuYY6FxIPp3Vg5EDWAxoXlmEFqxUqz1

यह मान तब एन्क्रिप्शन कुंजी के रूप में उपयोग किया जा सकता है। --encrypt-कुंजी का उपयोग करके innobackupex कमांड का उदाहरण:

$ innobackupex --encrypt=AES256 --encrypt-key=”bWuYY6FxIPp3Vg5EDWAxoXlmEFqxUqz1” /storage/backups/encrypted

डिक्रिप्ट करने के लिए, उपयुक्त --encrypt-key के साथ --decrypt विकल्प का उपयोग करें:

$ innobackupex --decrypt=AES256 --encrypt-key=”bWuYY6FxIPp3Vg5EDWAxoXlmEFqxUqz1”
/storage/backups/encrypted/2019-05-08_11-10-09/

बैकअप नीतियां

MySQL/MariaDB या यहां तक ​​कि Percona के टूल में बैकअप नीति कार्यक्षमता में कोई बिल्ड नहीं है। यदि आप अपने MySQL तार्किक या भौतिक बैकअप को प्रबंधित करना चाहते हैं तो आप उसके लिए ClusterControl का उपयोग कर सकते हैं।

ClusterControl मिश्रित वातावरण वाले उपयोगकर्ताओं के लिए सर्व-समावेशी खुला स्रोत डेटाबेस प्रबंधन प्रणाली है। यह MySQL या MariaDB के लिए उन्नत बैकअप प्रबंधन कार्यक्षमता प्रदान करता है।

ClusterControl से आप यह कर सकते हैं:

  • बैकअप नीतियां बनाएं
  • बैकअप की स्थिति, निष्पादन और बिना बैकअप के सर्वर की निगरानी करें
  • बैकअप और पुनर्स्थापना निष्पादित करें (समय पुनर्प्राप्ति में एक बिंदु सहित)
  • बैकअप प्रतिधारण नियंत्रित करें
  • क्लाउड स्टोरेज में बैकअप सेव करें
  • बैकअप सत्यापित करें (स्टैंडअलोन सर्वर पर पुनर्स्थापना के साथ पूर्ण परीक्षण)
  • बैकअप एन्क्रिप्ट करें
  • बैकअप संपीड़ित करें
  • और कई अन्य
ClusterControl:बैकअप प्रबंधन

बैकअप को क्लाउड में रखें

डेटा को विफलताओं से बचाने के साधन के रूप में संगठनों ने ऐतिहासिक रूप से टेप बैकअप समाधान तैनात किए हैं। हालाँकि, सार्वजनिक क्लाउड कंप्यूटिंग के उद्भव ने पारंपरिक रूप से उपलब्ध की तुलना में कम TCO वाले नए मॉडल को भी सक्षम किया है। डीआर समाधान की लागत को इसके डिजाइन से अलग करने का कोई व्यावसायिक अर्थ नहीं है, इसलिए संगठनों को न्यूनतम संभव लागत पर सुरक्षा के सही स्तर को लागू करना होगा।

क्लाउड ने डेटा बैकअप उद्योग को बदल दिया है। अपने किफायती मूल्य बिंदु के कारण, छोटे व्यवसायों के पास एक ऑफसाइट समाधान होता है जो उनके सभी डेटा का बैक अप लेता है (और हां, सुनिश्चित करें कि यह एन्क्रिप्टेड है)। Oracle और MySQL दोनों बिल्ट-इन क्लाउड स्टोरेज समाधान प्रदान नहीं करते हैं। इसके बजाय आप क्लाउड विक्रेताओं द्वारा प्रदान किए गए टूल का उपयोग कर सकते हैं। यहां एक उदाहरण s3 हो सकता है।

aws s3 cp severalnines.sql s3://severalnine-sbucket/mysql_backups

निष्कर्ष

अपने डेटाबेस का बैकअप लेने के कई तरीके हैं, लेकिन बैकअप रणनीति पर निर्णय लेने से पहले व्यावसायिक आवश्यकताओं की समीक्षा करना महत्वपूर्ण है। जैसा कि आप देख सकते हैं कि MySQL और Oracle बैकअप के बीच कई समानताएं हैं जो उम्मीद है कि आप अपने SLA से मिल सकते हैं।

हमेशा सुनिश्चित करें कि आप इन आदेशों का अभ्यास करते हैं। न केवल जब आप तकनीक के लिए नए होते हैं बल्कि जब भी डीबीएमएस अनुपयोगी हो जाता है तो आप जानते हैं कि क्या करना है।

यदि आप MySQL के बारे में अधिक जानना चाहते हैं, तो कृपया MySQL और MariaDB के लिए हमारे श्वेतपत्र The DevOps Guide to Database Backups की जाँच करें।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. WHMCS डेटाबेस को मारियाडीबी गैलेरा क्लस्टर में कैसे माइग्रेट करें

  2. डेबियन 9 पर Nginx, MariaDB 10 और PHP 7 के साथ WordPress स्थापित करें

  3. ClusterControl 1.5 की घोषणा - स्वचालित बैकअप सत्यापन और क्लाउड अपलोड की विशेषता

  4. मारियाडीबी में RLIKE कैसे काम करता है

  5. मारियाडीबी में INSERT () फ़ंक्शन कैसे काम करता है