यदि मास्टर ऑफ़लाइन हो जाता है, तो आप गुलाम डीबी के साथ मास्टर MySQL DB को फिर से कैसे सिंक कर सकते हैं?


11

MySQL सर्वर 1 मास्टर के रूप में चल रहा है।
MySQL Server 2 स्लेव के रूप में चल रहा है।

दोनों DBs ऑनलाइन के साथ, वे "सही सिंक" में हैं। यदि दास ऑफ़लाइन हो जाता है, तो कोई समस्या नहीं है यदि मास्टर अभी भी ऑनलाइन है; स्लेव के दोबारा ऑनलाइन होने के बाद वे सिंक में वापस जाएंगे।

सर्वर कॉन्फ़िगरेशन के अलावा, मैंने स्लेव डीबी के लिए कनेक्शन को (JSP कोड के साथ) रीडायरेक्ट किया यदि मास्टर ऑफ़लाइन हो जाता है (मैंने /etc/init.d/mysqld stop के साथ पाठ्यक्रम का परीक्षण किया है)।

जब मास्टर ऑनलाइन वापस जाता है, तो क्या गुलाम अपडेट के साथ मास्टर को सिंक करने के लिए कोई स्वचालित विधि है?

जवाबों:


8

उस प्रकृति की कुछ चीजों को खींचने का एक अच्छा तरीका मास्टर-मास्टर प्रतिकृति या परिपत्र प्रतिकृति स्थापित करना है। यह मल्टीमास्टर प्रतिकृति के साथ भ्रमित नहीं होना है।

यदि आपके पास मास्टर-स्लेव प्रतिकृति है, तो परिपत्र प्रतिकृति की स्थापना करना बहुत आसान है। इसे कॉन्फ़िगर करने के लिए आपको यहां क्या करना होगा।

इस उदाहरण के लिए, हम मानेंगे कि मास्टर-स्लेव प्रतिकृति सक्रिय है, लेकिन आप थोड़े डाउनटाइम (1-2 मिनट) का अनुभव करेंगे:

चरण 1) इस लाइन को मास्टर पर /etc/my.cnf में जोड़ें।

लॉग-गुलाम-अपडेट

चरण 2) इन लाइन को दास पर /etc/my.cnf में जोड़ें:

log-bin = mysql-bin (या इसके लिए जो कुछ भी मास्टर के पास है) लॉग-स्लेव-अपडेट

चेतावनी: यहाँ नीचे का संक्षिप्त समय है !!!

चरण 3) दास पर, सेवा mysql पुनरारंभ करें

यह स्लेव पर बाइनरी लॉग को सक्रिय करेगा

चरण 4) मास्टर पर, सेवा mysql बंद करो

चरण 5) मास्टर के लिए दास के / var / lib / mysql फ़ोल्डर की प्रतिलिपि बनाने के लिए rsync का उपयोग करें।

चेतावनी: यहाँ डाउनटाइम का लंबा समय है !!!

चरण 6) दास पर, सेवा mysql बंद करो

चरण 7) दास पर, अंतिम बाइनरी लॉग का पता लगाएं

चरण 8) दास पर, अंतिम बाइनरी लॉग की फ़ाइलों का पता लगाएं

चरण 9) मास्टर को स्लेव के / var / lib / mysql फ़ोल्डर की प्रतिलिपि बनाने के लिए rsync का उपयोग करें। यह एक तेज प्रति होनी चाहिए।

चरण 10) मास्टर पर,
दास के अंतिम बाइनरी लॉग के साथ master.info की पंक्ति 2 को संपादित करें ।
स्लेव के अंतिम बाइनरी लॉग की फाइल के साथ master.info की लाइन 3।
गुलाम के आईपी के साथ master.info की पंक्ति 4।
लाइन 5 प्रतिकृति उपयोगकर्ता का उपयोगकर्ता नाम है (DO TOUCH)
लाइन 6 प्रतिकृति उपयोगकर्ता का पासवर्ड है (DO NOT TOUCH)

चरण 11) मास्टर के सभी बाइनरी लॉग और बाइनरी लॉग इंडेक्स फ़ाइल को हटा दें।

चरण 12) गुलाम पर, सेवा mysql शुरू, 15 सेकंड प्रतीक्षा करें

चरण 13) मास्टर पर, सेवा mysql शुरू

चरण 14) मास्टर पर, स्टॉप स्लेज चलाएं; शोषक पैटर्न;

चरण 15) गुलाम पर, CHANGE MASTER को MASTER_HOST = 'IP of Slave', MASTER_USER = 'Step10 से प्रतिकृति उपयोगकर्ता का उपयोगकर्ता नाम', MASTER_PASSWORD = 'Step10 से प्रतिकृति उपयोगकर्ता का पासवर्ड', MASTER_LOG_FILE = 'Step14 से बाइनरी लॉग' चलाएं। MASTER_LOG_POS = Step14 से लॉगपोस।

चरण 16) दास पर, START SLAVE चलाएं;

चरण 17) मास्टर पर, START SLAVE चलाएं;

मैंने एक और StackExchange सवाल का जवाब देने के लिए इसी तरह के कदम उठाए

कोशिश तो करो !!!


बहुत अच्छा! क्या एक से अधिक दास डेटाबेस को मास्टर में सिंक करना संभव है, "मास्टर-मास्टर-मास्टर" समाधान की तरह?
हर्बर्ट अमल

इससे मरम्मत से परे मेरा सेटअप टूट गया। पूरी तरह से मेरे वीपीएस को फिर से स्थापित करना था। मुझे लगता है कि मैं अगली बार डॉगी सलाह पढ़ने से पहले एक स्नैपशॉट लूंगा।
वासली सिरैकिस

@VasiliSyrakis मुझे खेद है कि आपको लगता है कि मेरी सलाह धूमिल थी। इसके बावजूद, MySQL DBA के रूप में मेरे 10 वर्षों में, मैंने कभी भी VPS या MySQL इंस्टॉल को तबाह नहीं किया है जब प्रतिकृति के लिए बाइनरी लॉग्स को रिगाइन करता है। मैं कई वर्षों से बिना घटना के Drupal और Wordpress क्लाइंट के लिए ऐसा कर रहा हूं। मेरी सलाह के लिए क्षमा करें।
रोलैंडम्यूसीडीडीबीए

हम्म। मैं एक चल रहे उदाहरण की प्रतिलिपि बनाने के लिए rsync का उपयोग करने की अनुशंसा नहीं करूंगा। मैं Percona XtraBackup का उपयोग दास से मास्टर को पुन: व्यवस्थित करने के लिए करता हूँ । इसके अलावा आपको log-slave-updatesतब तक ज़रूरत नहीं है जब तक कि स्वामी के पास अतिरिक्त दास न हों।
बिल करविन

2

एसिंक्रोनस प्रतिकृति के साथ नहीं जो MySQL प्रदान करता है। आपने अभी तक कहावत को चरितार्थ किया है कि क्यों 'आउट ऑफ द बॉक्स' MySQL प्रतिकृति (पूर्व 5.5) अपने आप में एक उच्च उपलब्धता समाधान नहीं है। अर्ध-समकालिक प्रतिकृति (http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html) के साथ 5.5 के साथ चीजें थोड़ी बेहतर हो जाती हैं, लेकिन धीमी लेन-देन के समय पर जैसे ही मास्टर की प्रतीक्षा होती है दास से बिल्ली।

यदि मास्टर के नीचे जाने पर डेटा हानि की संभावना को स्वीकार करना एक विकल्प नहीं है, तो मैं कहूंगा कि साधारण मास्टर / दास की तुलना में अधिक परिष्कृत सेटअप क्रम में है।

मास्टर टू मास्टर प्रतिकृति को कई MySQL प्रसिद्ध लोगों द्वारा लाभ की तुलना में अधिक परेशानी माना गया है (यहां तक ​​कि MySQL AB स्वयं अब इसे उच्च उपलब्धता समाधान के रूप में अनुशंसित नहीं करता है)। इसलिए, मुझे लगता है कि ब्लॉक स्तर प्रतियों का उपयोग करके सक्रिय मास्टर और सिंक में निष्क्रिय दास रखने के लिए DRBD सेटअप का उपयोग करना है जो आपको वास्तव में यहां की आवश्यकता है।


1
मुझे खुद DRBD से प्यार है। मैं अपने फेलओवर तंत्र के रूप में ucarp का उपयोग करके कई ग्राहकों के साथ नियमित रूप से काम करता हूं। DRBD वास्तव में HA के लिए बहुत अच्छा और बेहतर है, बशर्ते डेटाबेस सभी InnoDB है। किसी भी विफलता के दौरान खुला MyISAM तालिका DRBD माध्यमिक में भी दुर्घटनाग्रस्त हो गया है। नई DRBD प्राइमरी में विफल होने पर InnoDB बस क्रैश रिकवरी से गुजरती है। इसलिए, मैं देखता हूं कि DRBD और InnoDB का एक साथ उपयोग किया जा रहा है। DRBD को लाने के लिए आपकी अच्छी समझ के लिए धन्यवाद। आपके उत्तर के लिए +1।
रोलैंडमाइसीडीडीबीए

धन्यवाद :) और मुझे लगता है कि मेरे जवाब में मैं अनुमान लगा रहा हूं कि यदि आप अपने प्रतिकृतियों के बीच डेटा संगतता के बारे में इतना ध्यान रखते हैं, तो आप पहले से ही सभी या ज्यादातर InnoDB हैं :)
TechieGurl

1

IMHO, सबसे पहले, एक गैर-बहु-मास्टर (मास्टर / दास) कॉन्फ़िगरेशन में, आपके दास को कभी भी लिखना नहीं चाहिए। दास my.cnf को कॉन्फ़िगर किया जाना चाहिए और सर्वर के साथ शुरू किया जाना चाहिए:

# Flag to not take writes from network
read-only

अगला, एक ग़ुलाम के साथ सिंक से बाहर एक मास्टर की समस्या को ठीक करने के लिए गलती से लिखता है, आपको दोनों मेजबानों पर डेटा को अलग करना होगा। यदि कोई महत्वपूर्ण टक्कर नहीं है, तो आपको अपने पूर्व दास को मास्टर को बढ़ावा देना चाहिए और नए मास्टर से नकल करने वाले दास होस्ट के रूप में अपने पुराने मास्टर को फिर से छवि देना चाहिए। (यहाँ हो सकता है / शायद डेटा की समस्या है)

अंत में, यदि आउटेज / डाउनटाइम का यह परिदृश्य आगे बढ़ने की संभावना है , तो दोनों मेजबानों को मल्टी-मास्टर (लॉग-बिन, सर्वर-आईडी, ऑफ़सेट, आदि) के रूप में सेट करने के लिए समय निकालें। इससे आपको आउटेज और डाउनटाइम्स को कुछ हद तक कम करने में मदद मिलेगी।

यदि आपको मास्टर / दास चलाना है , तो कम से कम अपने एसीएल और अनुप्रयोगों में उपयोगकर्ता कनेक्शन पढ़ने और लिखने के लिए कुछ बोनस अंक प्राप्त करें।

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