सभी डेटाबेस के MySQL मास्टर-मास्टर प्रतिकृति। कैसे?


16

पृष्ठभूमि : मेरे पास इस उत्कृष्ट मार्गदर्शिका के बाद मास्टर-मास्टर पंक्ति-आधारित-प्रतिकृति (RBR) में दो MySQL 5.1 सर्वर सेटअप हैं । मैं चाहता हूं कि सभी डेटाबेस दोहराया जाए, और नियमित रूप से नए डेटाबेस जोड़े जाएंगे।

लक्ष्य : मैं केवल एक सर्वर में DB को जोड़कर प्रतिकृति में नए डेटाबेस जोड़ने में सक्षम होना चाहूंगा; दोनों दासों को रोकने के बिना , कॉन्फ़िगरेशन फ़ाइलों को बदलें, MySQL सर्वर को पुनरारंभ करें, और दास को फिर से शुरू करें।

प्रश्न : से मैं क्या पढ़ा है, मैं लगता है कि मैं बस किसी भी छोड़ते हुए ऐसा कर सकते हैं binlog-do-db, binlog-ignore-db, replicate-do-db, और replicate-ignore-dbप्रत्येक सर्वर का विन्यास में सेटिंग है, लेकिन मुझे यकीन है कि नहीं हो सकता। डेटाबेस और टेबल स्तर के प्रतिकृति विकल्पों का मूल्यांकन कैसे किया जाता है, इस पर MySQL के डॉक्स मुझे लगता है कि इसे पूरा करने का कोई तरीका नहीं हो सकता है।

मेरी /etc/mysql/my.cnfफ़ाइलों के प्रासंगिक भाग नीचे कॉपी किए गए हैं। क्या मैं सही रास्ते पर हूं? क्या मैं भी संभव है?

मास्टर 1 :

[mysqld]
binlog-format = row
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1

master-host = <master2_ip>
master-user = slave_user
master-password = <password>
master-connect-retry = 60

log-bin = /var/log/mysql/mysql-bin.log
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
expire_logs_days = 14
max_binlog_size = 2048M

मास्टर 2 :

[mysqld]
binlog-format = row
server-id = 2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2

master-host = <master1_ip>
master-user = slave_user
master-password = <password>
master-connect-retry = 60

log-bin = /var/log/mysql/mysql-bin.log
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
expire_logs_days = 14
max_binlog_size = 2048M

1
आपके द्वारा लिखी जाने वाली मशीन पर DB बनाएं।
मार्टिन

आपका पूरा कॉन्फिग क्या है? मैं नीचे जवाब की कोशिश करो, यह काम नहीं किया :-(
zx1986

जवाबों:


17

यह है कि मैं दोनों स्वामी के लिए यह कैसे किया

log-bin = mysqld-bin
binlog-ignore-db=test
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
log-slave-updates
replicate-ignore-db=test
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
relay-log=mysqld-relay-bin

क्या आप डेटाबेस को या तो मास्टर में जोड़ने में सक्षम हैं और उन्हें स्वचालित रूप से दूसरे को दोहराया गया है?
एंड्रयू एनस्ले

हाँ, उन्होंने किया .. मैं सिर्फ सेटअप करने के लिए जिसे अनदेखा करना है
माइक

1
दो प्रश्न: मुझे केवल यह सुनिश्चित करने की आवश्यकता है कि हम दोनों एक ही बात कह रहे हैं। # 1 क्या आप दो मास्टर्स में से एक में एक डेटाबेस जोड़ने में सक्षम हैं और यह स्वचालित रूप से दूसरे पर बनाया गया है, और फिर नए डेटाबेस में डाला गया सभी डेटा कॉन्फ़िगरेशन को बदलने या सर्वर को पुनरारंभ किए बिना दोहराया जाता है? # 2 क्या आप स्टेटमेंट- या पंक्ति-आधारित प्रतिकृति का उपयोग कर रहे हैं? मुझे सभी डेटाबेसों पर सभी परिवर्तनों की आवश्यकता है; यहां तक ​​कि जो पहले से "उपयोग" बयान के बिना चलते हैं। क्या ये सेटिंग्स पंक्ति-आधारित प्रतिकृति के साथ अच्छी तरह से काम करेंगी?
एंड्रयू एनस्ले

3
हाँ हाँ हाँ हाँ हाँ :)
माइक

1
ठीक है, मैंने कल रात इन सेटिंग्स का उपयोग करके अपने सर्वर स्थापित किए। मैंने log-slave-updatesसेटिंग को छोड़ दिया क्योंकि मुझे इसकी कोई आवश्यकता नहीं दिखी। सब कुछ पूरी तरह से काम करता है। मैं डेटाबेस जोड़ने और छोड़ने में सक्षम हूं और परिवर्तनों को दोहराया जाता है। धन्यवाद! बाउंटी को सम्मानित किया।
एंड्रयू एंसले

4

डेटाबेस बनाने के संबंध में, पंक्ति-आधारित प्रतिकृति के साथ क्रिएट डेटा का उपयोग करने पर अभी भी बग रिपोर्ट हैं।

यह रिपोर्ट बंद है, लेकिन बग MySQL 5.1.47 में फिर से दिखाई दिया।
यह रिपोर्ट MySQL क्लस्टर (NDB स्टोरेज इंजन)
पर आधारित है। यह रिपोर्ट अभी भी प्रतिकृति-जंगली-अनदेखी-तालिका पर आधारित है जो अभी भी प्रतिकृति है।

पंक्ति-आधारित प्रतिकृति बाइनरी लॉग को एक असाधारण दर से बढ़ने का कारण बनता है जो नेटवर्क ट्रैफ़िक को स्पाइक कर सकता है बस दास के रिले लॉग को बाइनरी लॉग डेटा को शिपिंग कर सकता है।

@ मायके का कहना है कि उन्हें काम करने और ठीक करने के लिए डेटाबेस बनाने का काम मिला। मुझे इसमें कोई शक नहीं है। मैं क्या हूँ MySQL (ईएच ओरेकल) का एक छोटा सा लकीर है जो डेटाबेस के तुरंत बाद एक बार पंक्ति-आधारित प्रतिकृति से बाहर नहीं निकलता है।

यदि आप अभी भी बाइनरी लॉग में पंक्ति-आधारित प्रविष्टियाँ चाहते हैं, तो आप row_format MIXED पर स्विच करना चाह सकते हैं। आंतरिक रूप से, द्विआधारी लॉग प्रारूप बयान के बीच तैरता है और वैसे भी तय होता है: ( http://bugs.mysql.com/bug.php?id=40146 देखें )। पंक्ति-आधारित ( http://bugs.mysql.com/bug.php?id=39701 ) से मिश्रित और शिमिंग के उपयोग से अधिक बग रिपोर्ट बंद हो जाती हैं, लेकिन अभी भी समस्याएं रुक-रुक कर जारी हैं।

अंतिम नोट

अपनी स्वयं की पवित्रता के लिए, कृपया स्टेटमेंट-आधारित प्रतिकृति पर वापस लौटें और इस प्रकार बनाए गए डेटाबेस के बाद बनाए गए SQL के लिए क्रिएट डेटा (जो एक SQL स्टेटमेंट है) को स्थिर और सुसंगत बनाएं। वास्तव में, सबसे हालिया बग रिपोर्ट से पता चलता है कि स्टेटमेंट-आधारित प्रतिकृति का उपयोग करना सबसे अच्छा है, भले ही प्रलेखन डेटाबेस-स्तर और तालिका-स्तरीय विकल्पों के बारे में क्या कहता है।


सभी जानकारी के लिए धन्यवाद। स्टेटमेंट-आधारित-प्रतिकृति के साथ मेरी एकमात्र समस्या यह है कि डेटाबेस को निर्दिष्ट करने वाले परिवर्तन (यानी "INSERT INTO db1.table1 (col1) VALUES ('hi');) तब तक काम नहीं करेगा जब तक डेटाबेस उपयोग में वर्तमान डेटाबेस न हो। मुझे लगता है कि यह वक्तव्य-आधारित-प्रतिकृति पर स्विच करने और कुछ कोड को साफ करने का समय हो सकता है ...
एंड्रयू एनस्ले

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

0

हम्म ... आपको ऑटो-इन्क्रिम्ड कीज़ और फ़ील्ड्स को अलग करने / संभालने का एक तरीका भी पता लगाना होगा। यह दिलचस्प लग रहा है .. http://mysql-mmm.org/


यह मेरे कॉन्फ़िगरेशन फ़ाइलों में auto-increment-incrementऔर संभाला है auto-increment-offset। : यह पेज देखें dev.mysql.com/doc/refman/5.1/en/...
एंड्रयू Ensley

मुझे लगता है कि आप गलत समझ रहे हैं। @Andrew नए डेटाबेस जोड़ने की बात कर रहा है, नए डेटाबेस सर्वर जोड़ने की नहीं। यदि @Andrew नए डेटाबेस सर्वरों की शुरुआत कर रहा था, तो 3 या अधिक DB सर्वरों के बीच डेटा का पुनर्वितरण करते समय महत्वपूर्ण टकराव हो सकता है, जिसे आपका उत्तर संबोधित करेगा। आपके प्रयास के लिए +1, लेकिन कृपया सभी प्रश्नों को ध्यान से पढ़ें। मुझे भी उसी तरह जलाया गया है।
रोलैंडमाइसीडीडीबीए

@all: उफ़ .. सॉरी। मैं कसम खा सकता हूं कि मैं इसे पूरा पढ़ सकता हूं, लेकिन इसके बजाय किसी ने स्किम नहीं किया होगा ...
नंदिनी आनंद

-1

cmiiw मैंने सोचा कि आपको मास्टर 1 और मास्टर 2 पर डेटाबेस बनाने में सक्षम होना चाहिए बिना किसी बदलाव के या दास को रोक दिया, लेकिन सुनिश्चित करें कि मास्टर - मास्टर प्रतिकृति चल रही हो। क्योंकि आप परिभाषित नहीं करते हैं कि किस डेटाबेस को दोहराने की आवश्यकता है, इसका मतलब है कि सभी डेटाबेस को दोहराया जाएगा यदि आप इसे my.cnf पर परिभाषित नहीं करते हैं।


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