क्या MyISAM के साथ मिक्सडंप के दौरान InnoDB टेबल लॉक हो गए?


9

मैं अपने mysql सर्वर के लिए बैकअप समाधान ढूंढ रहा हूं और मुझे यथासंभव कम डाउनटाइम की आवश्यकता है। मेरे पास निम्नलिखित हैं:

  • MySQL सर्वर
  • उनकी प्रतिकृति नहीं है
  • प्रत्येक सर्वर अपने स्वयं के लिए खड़ा है

यह संख्या बढ़ सकती है, इसलिए एक मास्टर / दास प्रतिकृति स्थापित करना एक अच्छा विचार नहीं होगा।

सबसे आसान बैकअप तरीका है, जैसा कि मैं देख रहा हूँ कि यह "autoysqlbackup" जैसे सॉफ्टवेयर के साथ mysqldump का उपयोग कर रहा है। मेरा सबसे महत्वपूर्ण डेटा InnoDB का उपयोग करता है। मेरी InnoDB टेबल बहुत भारी हैं।

सवाल यह है: अगर मैं सर्वर में सभी डेटाबेस के लिए एक mysqldump करता हूं, तो क्या यह मेरे इनोडब टेबल को लॉक करेगा?

जवाबों:


7

InnoDB और MyISAM के साथ mysqldumps को पारस्परिक रूप से अनन्य माना जाता है। यहाँ क्यों है:

यदि आप mysqlump के चालू होने पर mysql में प्रवेश कर सकते हैं, तो आपको कुछ इस तरह दिखाई देगा:

SELECT /* SQL_NO_CACHE */ * FROM tblname

डिफ़ॉल्ट रूप से, mysqldump निम्नलिखित कार्य करेगा:

  • हर डेटाबेस को वर्णमाला क्रम में डंप किया जाता है
  • प्रति डेटाबेस डंप की गई प्रत्येक तालिका को वर्णमाला क्रम (भंडारण इंजन की परवाह किए बिना) में डंप किया जाता है

यह एक MySQL इंस्टेंस के लिए ठीक होना चाहिए जिसमें कोई अन्य डेटाबेस गतिविधि नहीं है। InnoDB टेबल और MyISAM टेबल एक दूसरे को प्रभावित नहीं करते हैं।

--single-transactionएक सब-इनओडीबी माईएसक्यूएल इंस्टेंस के खिलाफ उपयोग करने से एक चेकपॉइंट बनता है और एक ही पॉइंट-इन-टाइम से सभी तालिकाओं को डंप करता है। एक बार जब MyISAM तालिका सामने आती है, तो सभी दांव बंद हो जाते हैं। यह एक अलग बिंदु से समय में डंप होने के लिए MyISAM के बाद सभी InnoDB तालिकाओं का कारण बन सकता है।

InnoDB और MyISAM के मिश्रण के लिए एक सुसंगत बिंदु-में-समय डंप करने के लिए आपके पास विकल्प हैं

विकल्प 1

Mysql को पुनरारंभ करें ताकि कोई और टीसीपी / आईपी और फिर mysqldump के माध्यम से लॉगिन न कर सके

service mysql restart --skip-networking --skip-grant-tables
mysqldump --routines --triggers --all-databases > MySQLData.sql
service mysql restart 

विकल्प 2

यदि सभी MyISAM टेबल केवल पढ़ने के लिए हैं, तो mysqldump --single-transaction का उपयोग करें

विकल्प # 3

यदि कोई MyISAM टेबल लिखी जा रही है, तो - सिंगल्स-ट्रांजेक्शन पर्याप्त नहीं है

आप निम्न कार्य करेंगे:

mysql -u... -p... -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)"
sleep 30
mysqldump --routines --triggers --all-databases > MySQLData.sql

Mysqldump होने के तुरंत बाद, mysql में लॉगिन करें और करें show processlist;। क्वेरी के लिए देखें SELECT SLEEP(86400), प्रक्रिया आईडी ढूंढें, और चलाएंKILL <procidnumn>;


5

mysqldump --single-transactionतालिकाओं को लॉक नहीं करता है लेकिन MyISAM तालिकाओं को इस विकल्प के साथ लगातार डंप होने की गारंटी नहीं है। यह उपयोग करने के लिए बेहतर है mydumper, mydumperMyISAM तालिकाओं को लॉक करता है और InnoDB को लॉक नहीं करता है ताकि डंप सुसंगत हो।


वाह, इस महान उपकरण के लिए धन्यवाद! क्या आप एक ऐसे उपकरण से परिचित हैं जो mydumper के साथ दैनिक, साप्ताहिक, मासिक बैकअप को स्वचालित कर सकता है? "आटोमिसक्लबैकअप" जैसा कुछ, सिर्फ mydumper के साथ? धन्यवाद।
तूनानो

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.