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>;