2010-01-27 7 views
5

मुझे मास्टर माईएसQL (5.0, लिनक्स) सर्वर पर कोई समस्या है: मैंने टेबल पंक्ति पर एक टिप्पणी जोड़ने की कोशिश की, जो एक वैकल्पिक तालिका कमांड में अनुवाद करता है। अब प्रक्रिया 'कॉपी टू टीएमपी टेबल' पर फंस गई है, 100'000'000 + पंक्तियों की प्रतिलिपि बना रही है। डिस्क आईओ उपयोग असहज रूप से उच्च है।क्या यह एक प्रतिकृति MySQL-process को मारने के लिए सुरक्षित है जो 'tmp table पर प्रतिलिपि' है?

चूंकि मास्टर प्रतिकृति का उपयोग कर रहा है, इसलिए मुझे यकीन है कि अगर मैं इस प्रक्रिया को मार सकता हूं तो मुझे यकीन नहीं है। दासों ने अभी तक अल्टर टेबल कमांड नहीं देखा है।

(यह स्पष्ट करने के लिए: मैं MySQL-PROCESSLIST से प्रक्रिया की हत्या के बारे में बात कर रहा हूँ, नहीं MySQL-Daemon-प्रक्रिया ही।)

उत्तर

1

हां आप इसे मार सकते हैं - एल्टर इसे तब तक बिनलॉग में नहीं बनायेगा जब तक कि लेनदेन पूरा नहीं हो जाता है, यानी जब तक एल्टर समाप्त नहीं हो जाता है। तो दास इसे नहीं देख पाएंगे और न ही निष्पादित करेंगे, और मास्टर पुराने टेबल संरचना में रोलबैक करेगा।

आप आसानी से सत्यापित कर सकते हैं कि show binlog events या mysqlbinlog उपयोगिता का उपयोग करके ALTER अभी तक बिनलॉग में नहीं है।

0

नहीं, यह सुरक्षित नहीं है। केवल अगर आपके पास किसी समस्या के मामले में पुनर्स्थापित करने के लिए डेटाबेस का पूर्ण बैकअप (हाल ही में) हो रहा है। कुछ ताले हो सकते हैं और इसके बाद आप टेबल को बंद कर सकते हैं, चाबियों पर संभावित क्षति हो सकती है।

सलाह के रूप में यदि आप ऐसे बड़े डेटाबेस के लिए नए कॉलम जोड़ते हैं। यह

  • तालिका स्कीमा
  • की एक नकल बनाने के लिए चलने वाले मेज पर बदल जबकि यह खाली होने पर आसान है, में ...() से चुनिंदा क्षेत्रों एक डालने के साथ मूल से
  • रूप से भरें .. ..

यह बहुत तेज़ है। फिर स्पष्ट रूप से तालिका को मूल नाम बदलें।

+0

मैं आंतरिक प्रक्रिया के बारे में बात कर रहा था, न कि mysqld-process खुद। –

0

आप आपरेशन को मार सकता है, लेकिन दो बातें होती हैं कर सकते हैं:

  1. गुलाम स्कीमा मास्टर के साथ असंगत है (और इसलिए :)
  2. दास पर प्रतिकृति बंद कर सकता है।

जब प्रतिकृति बंद हो जाता है, तो आप मैन्युअल गुलाम सर्वर पर दर्ज करके 'alter table' शिक्षा से अधिक लंघन द्वारा गुलाम (रों) ठीक करने की कोशिश कर सकते हैं:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; SLAVE START;

संबंधित मुद्दे