MySQL DB का बैकअप लेने के लिए सर्वोत्तम अभ्यास


23

मुझे हाल ही में पता चला है कि MySQL से चलने वाले हमारे प्रोडक्शन वेब सर्वर नियमित रूप से (या बिल्कुल) बैकअप नहीं ले रहे हैं। मैं SQL Server DB का समर्थन करने के लिए उपयोग किया जाता हूं, लेकिन MySQL DB के साथ एक टन का अनुभव नहीं है। 'Mysqldump' या किसी अन्य DB बैकअप टूल का उपयोग करने के लिए कोई सर्वोत्तम अभ्यास?

मैं शायद शेड्यूल का काम करूंगा ताकि रात हो जाए और फिर अपने बैकअप सिस्टम के साथ फाइलों का बैकअप ले सकूं।

धन्यवाद।

जवाबों:


29

MySQL सर्वर बैकअप लेने के लिए सर्वोत्तम अभ्यास:

MySQL प्रतिकृति

MySQL में सेटअप प्रतिकृति। आपको मास्टर और स्लेव सर्वर सेटअप करना होगा। DB के लिए सभी रीड-राइट आपके गुलाम सर्वर पर जा सकते हैं। प्रतिकृति होने का लाभ यह है कि आप मास्टर सर्वर को बाधित किए बिना अपने दास सर्वर से बैकअप ले सकते हैं, आपका आवेदन बिना किसी डाउनटाइम के मास्टर पर काम करना जारी रखेगा।

MySQL डंप का उपयोग करना

यदि आपका डेटा सेट छोटा है (मुझे एहसास है कि "छोटा" एक सापेक्ष शब्द है .. इसे योग्य बनाने के लिए, आइए <10GB) कहते हैं, तो mysqldump शायद बहुत अच्छा काम करेगा। यह आसान है, यह ऑनलाइन है और यह बहुत लचीला है। कुछ चीजें जो mysqldump कर सकती हैं: बैकअप सब कुछ या बस कुछ डेटाबेस या टेबल बैकअप केवल DDL तेजी से पुनर्स्थापना के लिए डंप का अनुकूलन करता है परिणामी sql फ़ाइल को अन्य RDBMSes और कई और चीजों के साथ अधिक संगत बनाता है।

हालांकि, सबसे महत्वपूर्ण विकल्प आपके बैकअप की स्थिरता से संबंधित हैं। मेरा पसंदीदा विकल्प हैं: - एकल-लेन-देन: यह विकल्प एक सुसंगत बैकअप देता है, यदि (और केवल यदि) तालिकाओं में InnoDB इंजन इंजन का उपयोग किया जाता है। यदि आपके पास कोई गैर-केवल-पढ़ने योग्य MyISAM तालिकाएँ हैं, तो उन्हें बैकअप लेते समय इस विकल्प का उपयोग न करें। --मास्टर-डेटा = 2: यह विकल्प सुनिश्चित करेगा कि आपका डंप सुसंगत हो (लॉक-ऑल-टेबल तब तक करें जब तक कि आपने विकल्प नहीं जोड़ा है - सिंगल्स-ट्रांजेक्शन)। --मास्टर-डेटा विकल्प परिणामी डंप फ़ाइल में बाइनरी लॉग स्थिति को भी रिकॉर्ड करता है (= 2 इस लाइन को डंप फ़ाइल में टिप्पणी करने का कारण बनता है)

Mysqldump के बारे में अंतिम टिप्पणी: ध्यान रखें कि पुनर्स्थापना समय बैकअप समय की तुलना में काफी लंबा हो सकता है। यह कई कारकों पर निर्भर करेगा, उदाहरण के लिए, आपके पास कितने सूचकांक हैं।

LVM स्नैपशॉट

उन लोगों के लिए जिनके पास बड़े डेटासेट हैं, एक भौतिक बैकअप रास्ता तय करना है। जब आप कोल्ड बैकअप ले सकते हैं (यानी, MySQL सर्विस को बंद करें, डेटा डायरेक्टरी को कॉपी करें, सर्विस को पुनरारंभ करें), तो कई लोग डाउनटाइम नहीं चाहते हैं। मेरा पसंदीदा समाधान स्नैपशॉट है। यह गर्म हो सकता है (InnoDB के लिए) या एक संक्षिप्त लॉक (MyISAM के लिए) की आवश्यकता होती है। अपने सभी डेटा (ib_logfiles शामिल करें) को शामिल करना न भूलें। लेन्ज इस के साथ मदद करने के लिए एक अच्छी उपयोगिता प्रदान करता है: http://www.lenzg.net/mylvmbackup/

MySQL एंटरप्राइज बैकअप का उपयोग करना

MySQL एंटरप्राइज बैकअप का उपयोग करने के लाभ:

  • InnoDB तालिकाओं के "हॉट" बैकअप पूरी तरह से ऑनलाइन होते हैं, बिना बैकअप के केवल विशेष तालिकाओं या तालिकाओं को अवरुद्ध करते हैं
  • केवल एक बैकअप से पहले बदले गए डेटा का बैकअप लें
  • संपीड़ित बैकअप - 90% तक संग्रहण सहेजता है और कई और अधिक ।।

संदर्भ: http://www.mysql.com/products/enterprise/backup/features.html http://www.mysql.com/products/enterprise/backup.html


7

मैं बैकअप के लिए उपयोग करने के लिए एक समर्पित प्रतिकृति स्थापित करने की सलाह दूंगा। यह आपको प्राथमिक को प्रभावित किए बिना कोई भी बैकअप कार्य करने देगा। चूंकि यह आपकी वास्तुकला में जटिलता जोड़ता है, आप प्रतिकृति लैग की निगरानी करना चाहते हैं ताकि यह सुनिश्चित हो सके कि सब कुछ काम कर रहा है।

वास्तविक प्रक्रिया के लिए, आपके पास बिना किसी तृतीय-पक्ष उपकरण के कुछ विकल्प हैं। स्नैपशॉट को mysqldumpकमांड का उपयोग करके लिया जा सकता है (यह मानते हुए कि आप InnoDB का उपयोग कर रहे हैं) mysqldump --all-databases --single-transaction > all_databases.sql:। डेटा आकार के आधार पर, MySQL को बंद करना और डेटा फ़ाइलों को सीधे बैकअप करना बेहतर हो सकता है। जब प्रतिकृति को फिर से शुरू किया जाता है तो यह उन सभी घटनाओं को फिर से दोहराएगा जो प्राथमिक अवधि में प्राप्त हुई थीं। यदि आप MySQL एंटरप्राइज का उपयोग कर रहे हैं तो mysqlbackupउपयोगिता यही करती है।

वृद्धावस्था में लॉग ऑन को सक्षम करके वृद्धिशील बैकअप लिया जा सकता है । जाहिर है, यह केवल उन घटनाओं को रिकॉर्ड करता है जो डेटा को म्यूट करते हैं, इसलिए आपको इसे ऊपर दिए गए स्नैपशॉट के साथ संयोजित करना होगा।


3
+1 के लिए, --single-transactionलेकिन जोड़ना न भूलें --events --routinesऔर मैं हमेशा इसका उपयोग करता हूं --triggers, भले ही यह डिफ़ॉल्ट रूप से सक्षम है, क्योंकि यह my.cnf में अक्षम किया जा सकता है। मैं कहूंगा कि यह मानक अभ्यास के रूप में उपयोग करने के लिए हमेशा बहुत अच्छा होता है चाहे आप वर्तमान में आपके डेटाबेस में उन प्रकार की वस्तुएं हों या नहीं।
माइकल - sqlbot

ध्यान दें कि mysqldump --all-database जब आप कम अधिकतम खुली हुई टेबल सेटिंग को परिभाषित करते हैं, तो वे त्रुटियों को ट्रिगर कर सकते हैं। इसलिए अपने mysql.log पर नज़र रखें। प्रतिकृति वास्तव में सबसे अच्छा बैकअप तरीका होगा
रेमंड निजलैंड

फिर आप डेटा की ऐतिहासिक प्रतियां कैसे रखते हैं? (अक्सर, एक ग्राहक एक महीने या उससे अधिक का बैकअप रखना चाहेगा, और जब कोई एप्लिकेशन बग डेटा को दूषित करता है, तो डेवलपर्स बग से पहले db की एक प्रति चाहते हैं।)
RonJohn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.