Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL प्रतिकृति:GTID आधारित प्रतिकृति में त्रुटिपूर्ण लेनदेन

GTID या वैश्विक लेनदेन पहचानकर्ता MySQL 5.6.5 में पेश किया गया था। GTID एक विश्व स्तर पर अद्वितीय आईडी है जो GTID-सक्षम MySQL होस्टिंग सर्वर पर निष्पादित सभी लेनदेन को दी जाती है। जीटीआईडी ​​सर्वर के यूयूआईडी का एक संयोजन है जहां एक विशेष लेनदेन किया गया है, और उस विशेष सर्वर पर उस लेनदेन की अनुक्रम संख्या है। यह GTID को विश्व स्तर पर अद्वितीय बनाता है।

MySQL प्रतिकृति

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

गलत लेनदेन ऐसे लेन-देन हैं जो एक या अधिक दासों पर लागू होते हैं जिन्हें अन्य नोड्स पर दोहराने की आवश्यकता नहीं होती है। ये दास पर लागू होने वाले रुक-रुक कर सुधार हो सकते हैं, या किसी एप्लिकेशन द्वारा दास को आकस्मिक रूप से लिखा जा सकता है।

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

(1) गलत लेन-देन अभी भी मास्टर के बिनलॉग में मौजूद है और यह इसे दासों को भेज देगा, इससे डेटा दूषित हो सकता है या त्रुटि हो सकती है।
(2) लेन-देन बिनलॉग में मौजूद नहीं है, और इसलिए दास को नहीं भेजा जा सकता, जो प्रतिकृति त्रुटि का कारण बनता है।

रोकथाम

इन चरणों का पालन करके गलत लेनदेन को सक्रिय रूप से रोका जा सकता है। यदि आपको किसी दास को ठीक करना है, तो गलत लेनदेन को कम करने का एक तरीका दास पर बाइनरी लॉगिंग को अस्थायी रूप से बंद करना है। गलत क्वेरी निष्पादित करने से पहले sql_bin_log =0 निष्पादित करना चाल चलनी चाहिए। आप बाद में sql_bin_log =1 चलाकर बिनलॉग को सक्षम कर सकते हैं। किसी भी एप्लिकेशन को दासों को लिखने से रोकने के लिए, सर्वर पर केवल-पढ़ने के लिए सक्षम होना चाहिए जब यह एक दास के रूप में कॉन्फ़िगर किया गया हो।

पता लगाना

GTID आधारित MySQL प्रतिकृति सेट में एक गलत लेनदेन का पता लगाना आसान है। MySQL आपके द्वारा उपयोग किए जा रहे संस्करण MySQL के आधार पर सभी निष्पादित GTID को अपनी प्रदर्शन स्कीमा/सूचना स्कीमा तालिका में संग्रहीत करता है। वर्तमान दास के निष्पादित GTID को लेना और उन्हें वर्तमान मास्टर पर निष्पादित GTID से घटाकर आपको उस विशेष दास पर सभी गलत लेनदेन देना चाहिए। mysqlfailover या mysqlrpladmin जैसी उपयोगिताएँ भी गलत लेनदेन का पता लगाने में मदद कर सकती हैं।

समाधान

एक बार गलत लेन-देन का पता चलने के बाद, विफलता के बाद होने वाली प्रतिकृति त्रुटियों को ठीक करने के दो तरीके हैं। गुलाम GTID निष्पादित इतिहास से गलत लेनदेन के GTID को हटाने का एक तरीका है। इस तरह, जब दास को मास्टर के रूप में पदोन्नत किया जाता है, तो गलत लेनदेन को सभी नोड्स में दोहराया नहीं जाएगा। गलत लेन-देन को संभालने का एक और तरीका यह है कि अन्य सभी दासों को गलत लेन-देन को छोड़ देने के लिए कहा जाए। इसमें प्रतिकृति सेट में अन्य सभी नोड्स के लिए गलत लेनदेन के समान GTID के साथ एक खाली लेनदेन सम्मिलित करना शामिल होगा। इससे अन्य सभी नोड्स को लगेगा कि उन्होंने पहले ही इस लेनदेन को लागू कर दिया है और इसलिए इसे छोड़ देंगे। MySQL में Mysqlslavetrx नामक एक उपयोगिता है जो ऐसा करने के लिए समर्पित है। इस उपयोगिता का उपयोग दिए गए GTID के साथ खाली लेनदेन सम्मिलित करने के लिए किया जा सकता है। जैसा कि यहां चर्चा की गई है, खाली लेनदेन जोड़ने के अन्य उपयोग भी हो सकते हैं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. URL में दिनांक dd/mm/yyyy

  2. SQL सर्वर के CHOOSE () फ़ंक्शन के MySQL समतुल्य क्या है?

  3. SQL के साथ MySQL डेटाबेस में पहले या अंतिम कुछ वर्णों को निकालें या ट्रिम करें

  4. कैसे जांचें और max_allowed_packet mysql चर सेट करें

  5. पायथन और MySQL डेटाबेस:एक व्यावहारिक परिचय