यदि मास्टर और दास के पास मैसकल प्रतिकृति का अलग-अलग डेटाबेस आवेष्टन है, तो मैसकल डीबी को फिर से सिंक कैसे करें?


139

मैसूर मास्टर केServer1 रूप में चल रहा है । मैसूर SLAVE के रूप में चल रहा है ।
Server2

अब डीबी की प्रतिकृति मास्टर से लेकर स्लेव तक हो रही है ।

Server2नेटवर्क से हटा दिया गया है और इसे 1 दिन के बाद वापस कनेक्ट करें। इसके बाद मास्टर और दास में डेटाबेस में बेमेल है।

मास्टर से स्लेव में लिए गए डीबी को बहाल करने के बाद डीबी को फिर से कैसे सिंक करें?

जवाबों:


287

यह स्क्रैच से मास्टर-स्लेव प्रतिकृति को फिर से भरने के लिए पूर्ण चरण-दर-चरण प्रक्रिया है:

गुरु पर:

RESET MASTER;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

और अंतिम आदेश के परिणाम के मूल्यों को कॉपी करें

क्लाइंट से कनेक्शन को बंद किए बिना (क्योंकि यह रीड लॉक जारी करेगा) मास्टर को डंप करने के लिए कमांड जारी करता है:

mysqldump -u root -p --all-databases > /a/path/mysqldump.sql

अब आप लॉक जारी कर सकते हैं, भले ही डंप अभी तक समाप्त नहीं हुआ हो। ऐसा करने के लिए, MySQL क्लाइंट में निम्न कमांड निष्पादित करें:

UNLOCK TABLES;

अब स्केप या अपने पसंदीदा टूल का उपयोग करके डंप फ़ाइल को दास में कॉपी करें।

दास पर:

Mysql का कनेक्शन खोलें और टाइप करें:

STOP SLAVE;

इस कंसोल कमांड के साथ मास्टर का डेटा लोड करें:

mysql -uroot -p < mysqldump.sql

सिंक दास और मास्टर लॉग:

RESET SLAVE;
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98;

जहाँ उपरोक्त फ़ील्ड के मान हैं जिन्हें आपने पहले कॉपी किया था।

अंत में, टाइप करें:

START SLAVE;

यह जांचने के लिए कि टाइप करने के बाद सब कुछ फिर से काम कर रहा है:

SHOW SLAVE STATUS;

तुम्हे देखना चाहिए:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

बस!


8
INNODB के साथ टाइप किए गए डबटेज़ और अन्य जटिल कॉलम प्रकार जैसे BLOB और DATE परिभाषित, मैं निम्नलिखित स्विच का उपयोग करने की सलाह देता हूं:--opt --single-transaction --comments --hex-blob --dump-date --no-autocommit --all-databases
केन पेगा

4
है RESET_SLAVEआवश्यक? ध्यान दें कि ये निर्देश प्रतिकृति उपयोगकर्ता और पासवर्ड को रीसेट करते हैं, इसलिए आपको उन लोगों को फिर से दर्ज करना होगाCHANGE MASTER TO...
माइक एस

25
यदि आप मास्टर पर mysqldump को कॉल करते समय --मास्टर-डेटा फ़्लैग का उपयोग करते हैं, तो CHANGE MASTER TO कमांड को डंप फ़ाइल में लिखा जाता है और इस प्रकार डंप फ़ाइल को दास में आयात करने के बाद इसे निष्पादित करने के चरण को बचाता है।
udog

3
मास्टर को लॉक नहीं करना ( पेरकोना की आवश्यकता नहीं है) plusbryan.com/mysql-replication-without-downtime इसका एक और फायदा यह है कि SQL डंप भी आवश्यक "CHANGE MASTER" लाइन के साथ आता है (टिप्पणी के अनुसार
mahemoff

2
क्या इसे स्वचालित करने का कोई तरीका है?
मेटाफैनियल

26

MySQL साइट पर इसके लिए प्रलेखन पुराने तरीके से पुराना है और फुट-गन (जैसे कि इंटरेक्टिव_टाइमआउट) से भरा हुआ है। मास्टर के आपके निर्यात के भाग के रूप में READ LOCK के साथ FLUSH TABLES जारी करना आम तौर पर केवल तभी मायने रखता है जब LVM या zfs जैसे स्टोरेज / फाइलसिस्टम स्नैपशॉट के साथ समन्वय किया जाता है।

यदि आप mysqldump का उपयोग करने जा रहे हैं, तो आपको मानव त्रुटि के खिलाफ सुरक्षा के लिए --master-data विकल्प पर निर्भर रहना चाहिए और मास्टर पर ताले को यथासंभव जल्दी से जारी करना चाहिए।

मान लें कि मास्टर 192.168.100.50 है और दास 192.168.100.51 है, प्रत्येक सर्वर में एक अलग सर्वर-आईडी कॉन्फ़िगर किया गया है, मास्टर पर द्विआधारी लॉगिंग है और दास ने my.cff में केवल-1 = पढ़ा है

डंप आयात करने के बाद दास को प्रतिकृति शुरू करने में सक्षम होने के लिए, एक चेंज मास्टर कमांड जारी करें लेकिन लॉग फ़ाइल नाम और स्थिति को छोड़ दें:

slaveserver> CHANGE MASTER TO MASTER_HOST='192.168.100.50', MASTER_USER='replica', MASTER_PASSWORD='asdmk3qwdq1';

गुलाम का उपयोग करने के लिए मास्टर पर GRANT जारी करें:

masterserver> GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.100.51' IDENTIFIED BY 'asdmk3qwdq1';

मास्टर (स्क्रीन में) संपीड़न का उपयोग करके निर्यात करें और स्वचालित रूप से सही बाइनरी लॉग निर्देशांक कैप्चर करें:

mysqldump --master-data --all-databases --flush-privileges | gzip -1 > replication.sql.gz

दास को replication.sql.gz फ़ाइल की प्रतिलिपि बनाएँ और फिर इसे गुलाम पर चल रहे MySQL के उदाहरण के लिए zcat के साथ आयात करें:

zcat replication.sql.gz | mysql

दास को आदेश जारी करके प्रतिकृति शुरू करें:

slaveserver> START SLAVE;

वैकल्पिक रूप से /root/.my.cnf को स्वामी के समान रूट पासवर्ड स्टोर करने के लिए गुलाम पर अपडेट करें।

यदि आप 5.1+ पर हैं, तो सबसे पहले मास्टर के बिनलॉगफॉर्म को MIXED या ROW में सेट करना सबसे अच्छा है। इस बात से सावधान रहें कि पंक्ति लॉग किए गए इवेंट उन तालिकाओं के लिए धीमा हैं जिनमें प्राथमिक कुंजी का अभाव है। यह आमतौर पर binlog_format = statement (मास्टर पर) के वैकल्पिक (और डिफ़ॉल्ट) कॉन्फ़िगरेशन से बेहतर है, क्योंकि यह दास पर गलत डेटा का उत्पादन करने की कम संभावना है।

यदि आपको (लेकिन शायद नहीं चाहिए) फ़िल्टर प्रतिकृति, तो गुलाम विकल्प के साथ ऐसा करें प्रतिकृति-जंगली-डो-टेबल = dbname।% या प्रतिकृति-जंगली-उपेक्षा-तालिका = badDB।%। और केवल binlog_format = row का उपयोग करें।

यह प्रक्रिया मास्टर पर mysqldump कमांड की अवधि के लिए एक वैश्विक लॉक आयोजित करेगी, लेकिन अन्यथा मास्टर को प्रभावित नहीं करेगी।

यदि आपको mysqldump --master-data --all-database --single-transaction (क्योंकि आप केवल InnoDB तालिकाओं का उपयोग कर रहे हैं) का उपयोग करने के लिए लुभाए जाते हैं, तो आप शायद MySQL एंटरप्राइज बैकअप या xtrabackup नामक खुला स्रोत कार्यान्वयन का उपयोग करके सेवा कर रहे हैं (सौजन्य से) Percona)


3
यदि आप किसी मौजूदा दास का पुनर्निर्माण करना चाहते हैं, तो आप उपरोक्त प्रक्रिया का पालन कर सकते हैं, कुछ चरणों को छोड़ सकते हैं: GRANT और मैन्युअल CHANGE MASTER कमांड
Outdated

प्रश्न 1: खिड़कियों पर, इसके बराबर क्या होगा zcat। प्रश्न 2: mysqldumpप्रदर्शन के मामले में बड़े डेटाबेस के साथ यह किराया कैसे है ? अपनी सुझाई गई प्रक्रिया में उपयोग करने का कोई तरीका SELECT INTO OUTFILEऔर LOAD DATAसुगमता से? (चूँकि वे आम तौर पर तेजी से प्रदर्शन करते हैं)
इफेडि ओकोंकवो

STOP SLAVEइस प्रक्रिया में कहीं जरूरत नहीं है?
डेविड वी।

16

जब तक आप सीधे गुलाम (Server2) को नहीं लिख रहे हैं, केवल समस्या यह होनी चाहिए कि Server2 किसी भी अपडेट को याद कर रहा है जो कि डिस्कनेक्ट हो गया था। बस "स्टार्ट स्लेव" के साथ गुलाम को फिर से शुरू करना। गति के लिए सब कुछ वापस मिल जाना चाहिए।


2
आप बिन लॉग की जांच कर सकते हैं और देख सकते हैं कि क्या वे उस समय को कवर करते हैं जब आपका सिस्टम सिंक से बाहर था। यदि आप दिन याद कर रहे हैं तो यह एक बड़ी समस्या हो सकती है और लापता डेटा को पुनर्स्थापित करने के लिए आपको पूर्ण डंप करने की आवश्यकता होती है।
नेलारो

7

मुझे लगता है, Maatkit का उपयोग आपके लिए मदद करता है! आप एमके-टेबल-सिंक का उपयोग कर सकते हैं। कृपया इस लिंक को देखें: http://www.maatkit.org/doc/mk-table-sync.html


मुझे लगता है कि स्क्रिप्ट चलाते समय उन्हें अस्थायी रूप से लिखना बंद करना होगा।
जिट्क्स

यह अभी भी बहुत अच्छा काम करता है। उपकरण का नाम बदल दिया गया है और इसे अब pt-table-सिंक कहा जाता है। वास्तव में, हालांकि, मैंने पाया है कि उनका pt-slave-restart टूल जादू की तरह काम करता है।
मटले

7

मुझे इस प्रश्न की बहुत देर हो गई, हालाँकि मैंने इस समस्या का सामना किया और, बहुत खोज के बाद, मुझे ब्रायन कैनेडी से यह जानकारी मिली: http://plusbryan.com/mysql-replication-without-downtime

मास्टर पर इस तरह से एक बैकअप लें:
mysqldump --skip-lock-tables --single-transaction --flush-log --hex-blob --master-data = 2 -A> ~ / dip.sql

अब, फ़ाइल के प्रमुख की जाँच करें और MASTER_LOG_FILE और MASTER_LOG_POS के मानों को नीचे रखें। आपको बाद में इनकी आवश्यकता होगी: हेड डंप। sql -n80 | grep "MASTER_LOG"

स्लेव पर "डंप। एसक्यूएल" फाइल को कॉपी करें और इसे पुनर्स्थापित करें: mysql -u mysql-user -p <~ / dip.sql

स्लेव mysql से कनेक्ट करें और इस तरह एक कमांड चलाएं: CHANGE MASTER TO MASTER_HOST = 'मास्टर-सर्वर-आईपी', MASTER_USER = 'प्रतिकृति-उपयोगकर्ता', MASTER_PASSWORD = 'दास-सर्वर-पासवर्ड', MASTER_LOG_FILE = 'मान ऊपर से'। MASTER_LOG_POS = ऊपर से मूल्य; स्टार्ट स्लेव;

गुलाम की प्रगति की जाँच करने के लिए: कम से कम स्थिति;

यदि सब कुछ ठीक है, तो Last_Error रिक्त होगी, और Slave_IO_State रिपोर्ट करेगा "भेजने के लिए मास्टर की प्रतीक्षा"। Seconds_Behind_Master के लिए देखें जो इंगित करता है कि यह कितना पीछे है। YMMV। :)


3
यह काम करता है, और यदि दास पहले से ही सेट है और केवल सिंक से बाहर गिर गया है, तो आपको CHANGE MASTER चलाने की आवश्यकता नहीं है; बस निर्दिष्ट करें --master-data=1(या बस --master-data)।
एलसर्नी

5

यहाँ है कि मैं आमतौर पर क्या करता हूँ जब एक mysql गुलाम सिंक से बाहर हो जाता है। मैंने एमके-टेबल-सिंक पर ध्यान दिया है, लेकिन सोचा कि जोखिम अनुभाग डरावना लग रहा था।

मास्टर पर:

SHOW MASTER STATUS

आउटपुट किए गए कॉलम (फ़ाइल, स्थिति) हमारे लिए थोड़े काम के होंगे।

दास पर:

STOP SLAVE

फिर मास्टर डीबी को डंप करें और इसे दास डीबी पर आयात करें।

फिर निम्नलिखित को चलाएँ:

CHANGE MASTER TO
  MASTER_LOG_FILE='[File]',
  MASTER_LOG_POS=[Position];
START SLAVE;

जहां [फ़ाइल] और [स्थिति] "शेप मास्टर स्टैटस" से उत्पन्न मान हैं, जो ऊपर चला गया है।

उम्मीद है की यह मदद करेगा!


5
यह टूटा हुआ लगता है, क्योंकि स्पष्ट रूप FLUSH TABLES WITH READ LOCK;से आप से पहले आप नहीं करते हैं SHOW MASTER STATUSऔर मास्टर डेटाबेस को डंप करते हैं। मुझे लगता है कि यह दास पर डुप्लिकेट कुंजी त्रुटियों के परिणामस्वरूप हो सकता है क्योंकि आपने डंप लेने से पहले प्रभावी ढंग से एक समय में मास्टर स्थिति को निर्धारित किया था, इसलिए आप इतिहास को फिर से दोहराएंगे जो पहले से ही डंप में शामिल है। (यदि आप बताए गए क्रम में चीजें करते हैं।)
काजाग्निमस

5

डेविड के जवाब के बाद ...

उपयोग करने SHOW SLAVE STATUS\Gसे मानव-पठनीय आउटपुट मिलेगा।


आउटपुट को पेज करने का कोई तरीका?
जोशिया

'पेजर मोर' मुझे लगता है कि मैं इसे करूंगा
इयान

3

कभी-कभी आपको गुलाम को भी एक किक देने की जरूरत होती है

प्रयत्न

stop slave;    
reset slave;    
start slave;    
show slave status;

अक्सर, गुलाम, वे बस अटक जाते हैं लोग :)


... और Positionमास्टर पर दास के show master status;खिलाफ का उपयोग कर की निगरानी । दास को गुरु को पकड़ना चाहिए। एक छोटी नेटवर्क आउटेज के बाद अभी mysql 5.6 का उपयोग करके मेरे लिए काम किया। Exec_Master_Log_Pos:show slave status \G
माइक एस

10
यह भ्रामक है, एक बार जब आप दास को रीसेट कर देते हैं, तो नमस्कार पूरी तरह से खो गया ज्ञान होता है कि गुरु कहां है।
कियान चेन

2

यहां एक पूर्ण उत्तर दिया गया है, जो दूसरों की उम्मीद में मदद करेगा ...


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

इसलिए यहाँ मास्टर और दास को कॉन्फ़िगर करने के बाद परीक्षा परिणाम दिया गया है: http://dev.mysql.com/doc/refman/5.0/en/replication-howto.html ...

बशर्ते आप अनुशंसित मास्टर / स्लेव कॉन्फ़िगरेशन का उपयोग करें और दास को न लिखें, वह और मैं जहां सही है (जहां तक ​​mysql-server 5.x का संबंध है)। मुझे "START SLAVE" का उपयोग करने की भी आवश्यकता नहीं थी, यह सिर्फ इसके मास्टर तक पकड़ा गया। लेकिन हर 60 सेकंड में डिफ़ॉल्ट 88000 कुछ होता है, इसलिए मुझे लगता है कि अगर आपको लगता है कि आपको दास को शुरू या फिर शुरू करना पड़ सकता है। वैसे भी, मेरे जैसे उन लोगों के लिए जो यह जानना चाहते थे कि गुलाम ऑफ़लाइन होने और फिर से वापस जाने के लिए मैन्युअल हस्तक्षेप की आवश्यकता है .. नहीं, यह नहीं है।

शायद मूल पोस्टर में लॉग-फाइल (ओं) में भ्रष्टाचार था? लेकिन सबसे शायद एक दिन के लिए ऑफ-लाइन जाने वाला सर्वर नहीं है।


/usr/share/doc/mysql-server-5.1/README.Debian.gz से खींचा गया है, जो संभवत: गैर डेबियन सर्वरों को भी समझ में आता है:

* आवेदन पर अन्य अधिसूचनाएं
===============================
यदि MySQL सर्वर एक प्रतिकृति दास के रूप में कार्य कर रहा है, तो आपको नहीं करना चाहिए
एक मेमोरी-आधारित फाइलसिस्टम या पर एक डायरेक्टरी को इंगित करने के लिए सेट --tmpdir
एक निर्देशिका जो सर्वर होस्ट पुनरारंभ होने पर साफ़ हो जाती है। एक प्रतिकृति
एक मशीन को पुनः आरंभ करने के लिए दास को अपनी कुछ अस्थायी फ़ाइलों की आवश्यकता होती है
यह अस्थायी टेबल्स या लोड डेटा इनरिमर्स ऑपरेशन को दोहरा सकता है। अगर
अस्थायी फ़ाइल निर्देशिका में फ़ाइलें सर्वर के पुनरारंभ होने पर खो जाती हैं,
प्रतिकृति विफल।

आप कुछ sql का उपयोग कर सकते हैं जैसे: 'tmpdir' जैसे वैरिएबल दिखाएं; पता लगाने के लिए।


क्या दोनों डेटाबेस एक-दूसरे के बीच अपने आप सिंक हो जाएंगे? उदाहरण के लिए, मैं मास्टर को लिखूंगा, क्या दास अपने आप अपडेट हो जाएगा?
ट्रांसफॉर्माबिनल

2

इस त्रुटि को शामिल करने के लिए लोकप्रिय उत्तर को जोड़ना:

"ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO",

एक शॉट में गुलाम से प्रतिकृति:

एक टर्मिनल विंडो में:

mysql -h <Master_IP_Address> -uroot -p

कनेक्ट करने के बाद,

RESET MASTER;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

स्थिति नीचे दी गई है: ध्यान दें कि स्थिति संख्या बदलती रहती है!

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      98  | your_DB      |                  |
+------------------+----------+--------------+------------------+

डंप के समान निर्यात करें कि उन्होंने " दूसरे टर्मिनल का उपयोग " कैसे किया !

बाहर निकलें और अपने स्वयं के DB से कनेक्ट करें (जो दास है):

mysql -u root -p

नीचे दिए गए आदेशों का प्रकार:

STOP SLAVE;

बताए अनुसार डंप आयात करें (दूसरे टर्मिनल में, निश्चित रूप से!) और नीचे दिए गए कमांड टाइप करें:

RESET SLAVE;
CHANGE MASTER TO 
  MASTER_HOST = 'Master_IP_Address', 
  MASTER_USER = 'your_Master_user', // usually the "root" user
  MASTER_PASSWORD = 'Your_MasterDB_Password', 
  MASTER_PORT = 3306, 
  MASTER_LOG_FILE = 'mysql-bin.000001', 
  MASTER_LOG_POS = 98; // In this case

एक बार लॉगिन करने के बाद, सर्वर_आईडी पैरामीटर सेट करें (आमतौर पर, नए / गैर-प्रतिकृति डीबी के लिए, यह डिफ़ॉल्ट रूप से सेट नहीं होता है),

set global server_id=4000;

अब, दास शुरू करो।

START SLAVE;
SHOW SLAVE STATUS\G;

आउटपुट वैसा ही होना चाहिए जैसा उसने बताया था।

  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes

नोट: एक बार दोहराने पर, स्वामी और दास एक ही पासवर्ड साझा करते हैं!


क्या दोनों डेटाबेस एक-दूसरे के बीच अपने आप सिंक हो जाएंगे? उदाहरण के लिए, मैं मास्टर को लिखूंगा, क्या दास अपने आप अपडेट हो जाएगा?
ट्रांसफॉर्मिनरी

1

LVM का उपयोग करके गुलाम का पुनर्निर्माण

यहां वह विधि है जिसका उपयोग हम लिनक्स एलवीएम का उपयोग करके MySQL दासों के पुनर्निर्माण के लिए करते हैं। यह आपके स्वामी पर बहुत कम डाउनटाइम की आवश्यकता के दौरान एक सुसंगत स्नैपशॉट की गारंटी देता है।

मास्टर MySQL सर्वर पर शून्य से अधिकतम गंदे पृष्ठ प्रतिशत सेट करें। यह MySQL को डिस्क के सभी पृष्ठों को लिखने के लिए मजबूर करेगा जो पुनरारंभ को काफी तेज करेगा।

set global innodb_max_dirty_pages_pct = 0;

गंदे पृष्ठों की संख्या की निगरानी के लिए कमांड चलाएं

mysqladmin ext -i10 | grep dirty

एक बार संख्या कम हो जाने के बाद आप जारी रखने के लिए पहुँच गए हैं। अगली बार पुराने बिन लॉग / रिले लॉग को खाली करने के लिए मास्टर को रीसेट करें:

RESET MASTER;

LV पथ प्राप्त करने के लिए lvdisplay निष्पादित करें

lvdisplay

आउटपुट इस तरह दिखेगा

--- Logical volume ---
LV Path                /dev/vg_mysql/lv_data
LV Name                lv_data
VG Name                vg_mysql

कमांड के साथ मास्टर डेटाबेस को बंद करें

service mysql stop

इसके बाद एक स्नैपशॉट लें, mysql_snapshot नया लॉजिकल वॉल्यूम नाम होगा। यदि बिनलॉग ओएस ड्राइव पर होते हैं, तो उन्हें स्नैपशॉट भी होना चाहिए।

lvcreate --size 10G --snapshot --name mysql_snapshot /dev/vg_mysql/lv_data

कमांड के साथ फिर से मास्टर शुरू करें

service mysql start

डिफ़ॉल्ट पर सेटिंग करने वाले गंदे पृष्ठों को पुनर्स्थापित करें

set global innodb_max_dirty_pages_pct = 75;

सुनिश्चित करें कि स्नैपशॉट है और दृश्यमान बनाने के लिए फिर से lvdisplay चलाएं

lvdisplay

आउटपुट:

--- Logical volume ---
LV Path                /dev/vg_mysql/mysql_snapshot
LV Name                mysql_snapshot
VG Name                vg_mysql

स्नैपशॉट माउंट करें

mkdir /mnt/mysql_snapshot
mount /dev/vg_mysql/mysql_snapshot /mnt/mysql_snapshot

यदि आपके पास मौजूदा MySQL गुलाम है तो आपको इसे रोकने की आवश्यकता है

service mysql stop

इसके बाद आपको MySQL डेटा फ़ोल्डर साफ़ करना होगा

cd /var/lib/mysql
rm -fr *

वापस मास्टर के पास। अब स्नैपशॉट को MySQL स्लेव में rsync करें

rsync --progress -harz /mnt/mysql_snapshot/ targethostname:/var/lib/mysql/

एक बार rsync पूरा हो जाने पर आप स्नैपशॉट को अनमाउंट कर सकते हैं और हटा सकते हैं

umount /mnt/mysql_snapshot
lvremove -f /dev/vg_mysql/mysql_snapshot

मास्टर पर प्रतिकृति उपयोगकर्ता बनाएँ यदि पुराना प्रतिकृति उपयोगकर्ता मौजूद नहीं है या पासवर्ड अज्ञात है

GRANT REPLICATION SLAVE on *.* to 'replication'@'[SLAVE IP]' identified by 'YourPass';

सत्यापित करें कि / var / lib / mysql डेटा फ़ाइलें mysql उपयोगकर्ता के स्वामित्व में हैं, यदि ऐसा है तो आप निम्न कमांड को छोड़ सकते हैं:

chown -R mysql:mysql /var/lib/mysql

अगला बनलॉग स्थिति रिकॉर्ड करें

ls -laF | grep mysql-bin

आपको कुछ ऐसा दिखाई देगा

..
-rw-rw----     1 mysql mysql  1073750329 Aug 28 03:33 mysql-bin.000017
-rw-rw----     1 mysql mysql  1073741932 Aug 28 08:32 mysql-bin.000018
-rw-rw----     1 mysql mysql   963333441 Aug 28 15:37 mysql-bin.000019
-rw-rw----     1 mysql mysql    65657162 Aug 28 16:44 mysql-bin.000020

यहाँ मास्टर लॉग फ़ाइल अनुक्रम में उच्चतम फ़ाइल संख्या है और बिन लॉग स्थिति फ़ाइल का आकार है। इन मूल्यों को रिकॉर्ड करें:

master_log_file=mysql-bin.000020
master_log_post=65657162

इसके बाद गुलाम MySQL शुरू करें

service mysql start

निम्नलिखित को निष्पादित करके दास पर मास्टर कमांड निष्पादित करें:

CHANGE MASTER TO 
master_host="10.0.0.12", 
master_user="replication", 
master_password="YourPass", 
master_log_file="mysql-bin.000020", 
master_log_pos=65657162; 

अंत में दास शुरू करें

SLAVE START;

स्लेव स्टेटस जांचें:

SHOW SLAVE STATUS;

सुनिश्चित करें कि गुलाम IO चल रहा है और कोई कनेक्शन त्रुटियाँ नहीं हैं। सौभाग्य!

बीआर, जुहा वाहनिया

मैंने हाल ही में अपने ब्लॉग पर यह लिखा है जो यहाँ पाया गया है ... वहाँ कुछ और विवरण हैं लेकिन कहानी समान है।

http://www.juhavehnia.com/2015/05/rebuilding-mysql-slave-using-linux-lvm.html


0

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

मुझे उम्मीद है कि यह आपकी (और अन्य लोगों की भी) मदद करेगा।

कैसे करें (री-सिंक) MySQL मास्टर-स्लेव प्रतिकृति


मुझे लगता है कि स्क्रिप्ट हमेशा मास्टर लॉग स्थिति 1 और मास्टर लॉग फ़ाइल का नाम सेट करती है। मुझे यह सुनिश्चित करने के लिए पर्याप्त नहीं है कि मुझे इससे चिंतित होना चाहिए या नहीं। क्या आप समझाएँगे? मेरे पास वर्तमान में 1,000,000 से अधिक की स्थिति है। इसका मतलब यह है कि यह गति प्राप्त करने से पहले 1mil प्रश्नों को फिर से खेलना होगा? क्या मौजूदा डेटा के खिलाफ उन प्रश्नों को खेलने में भ्रष्टाचार की संभावना नहीं है? मैं सोच रहा हूं कि स्क्रिप्ट में क्यों नहीं जब mysql डंप का उपयोग करते हैं --मास्टर-डेटा = 2 विकल्प और फिर फ़ाइल को खींचकर उन्हें सेट करने के लिए डंप से बाहर निकाल दें?
जोसिया

0

हम MySQL के मास्टर-मास्टर प्रतिकृति तकनीक का उपयोग कर रहे हैं और यदि एक MySQL सर्वर का कहना है कि नेटवर्क से 1 को हटा दिया जाता है, तो कनेक्शन बहाल होने के बाद यह स्वयं को फिर से जोड़ देता है और सर्वर 2 में किए गए सभी रिकॉर्ड जो नेटवर्क में थे, को स्थानांतरित कर दिया जाता है सर्वर 1 जो बहाली के बाद कनेक्शन खो दिया है। डिफ़ॉल्ट रूप से प्रत्येक 60 सेकंड के बाद अपने मास्टर से कनेक्ट करने के लिए MySQL में गुलाम धागा पुन: जुड़ता है। इस संपत्ति को MySQL हा फ्लैग "मास्टर_कनेक्ट_रेट्री = 5" के रूप में बदला जा सकता है जहां 5 सेकंड में है। इसका मतलब है कि हम हर 5 सेकंड के बाद फिर से प्रयास करना चाहते हैं।

लेकिन आपको यह सुनिश्चित करने की आवश्यकता है कि जो सर्वर कनेक्शन खो गया है वह डेटाबेस में कोई कमिट नहीं करता है क्योंकि आपको डुप्लिकेट कुंजी मिलती है त्रुटि कोड: 1062


0

मास्टर :

mysqldump -u root -p --all-databases --master-data | gzip > /tmp/dump.sql.gz  

scp master:/tmp/dump.sql.gz slave:/tmp/ सर्वर के लिए डंप फ़ाइल ले जाएँ

दास:

STOP SLAVE;

zcat /tmp/dump.sql.gz | mysql -u root -p

START SLAVE;
SHOW SLAVE STATUS;  

नोट :
मास्टर पर आप SET GLOBAL expire_logs_days = 3गुलाम मुद्दों के मामले में 3 दिनों के लिए दूर रखने के लिए चला सकते हैं।

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