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

पारंपरिक प्रतिकृति से GTID में माइग्रेट करें

इस लेख में, हम पारंपरिक प्रतिकृति से GTID में माइग्रेट करने पर एक नज़र डालने जा रहे हैं,

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

आइए कुछ पर चर्चा करें और सटीक होने के लिए यह केवल एक GTID संबंधित स्थिति चर है। ONGOING_ANONYMOUS_TRANSACTION_ COUNT, GTID के स्वामित्व का समकक्ष है, लेकिन ONGOING_ANONYMOUS_TRANSACTION_COUNT के रूप में माइग्रेशन के मामले में, इसे अनाम लेन-देन कहा जाता है क्योंकि इसमें कोई पहचानकर्ता नहीं है जो GTID है।

प्रतिकृति टोपोलॉजी में किसी एक नोड पर और अंत में सभी नोड्स पर सभी ऑपरेशन किए जाने की आवश्यकता है। सबसे अच्छा अभ्यास पहले दास और मास्टर को करना है, लेकिन बहुत सारे संचालन के मामले में आदेश वास्तव में तब तक मायने नहीं रखता जब तक कि वे प्रतिकृति टोपोलॉजी के प्रत्येक उदाहरण पर किए जाते हैं।

इस माहौल में, मेरे पास तीन वर्चुअल मशीनें हैं, उनमें से दो डेटाबेस हैं और उनमें से एक ट्रैफिक उत्पन्न करने के लिए sysbench मशीन है तो चलिए शुरू करते हैं।

मास्टर:192.168.66.5

गुलाम:  192.168.66.7

sysbench नोड पर sysbench डेटाबेस बनाने के लिए तैयार कमांड चलाते हैं, आप इसे नीचे से कॉपी-पेस्ट कर सकते हैं।

sysbench \
--db-driver=mysql \
--mysql-user=sbtest_user \
--mysql_password= password \
--mysql-db=sbtest \
--mysql-host=192.168.66.5 \
--mysql-port=3306 \
--tables=16 \
--table-size=10000 \
/usr/share/sysbench/oltp_read_write.lua prepare

Sysbench नोड पर मास्टर के खिलाफ कुछ कार्यभार चलाता है जिसे हम कार्य की अवधि के लिए चला रहे थे।

sysbench \
--db-driver=mysql \
--mysql-user=sbtest_user \
--mysql_password=password \
--mysql-db=sbtest \
--mysql-host=192.168.66.5 \
--mysql-port=3306 \
--tables=16 \
--table-size=10000 \
--threads=4 \
--time=0 \
--events=0 \
--rate=10 \
--report-interval=1 \
/usr/share/sysbench/oltp_read_write.lua run

आइए MySQL क्लाइंट को सभी नोड्स, सभी डेटाबेस नोड्स पर शुरू करें। आइए मास्टर पर शो प्रक्रिया सूची देखें ताकि आप देख सकें कि यह यहां चल रहा है।

mysql> show processlist;
+----+-----------------+--------------------+--------+-------------+------+---------------------------------------------------------------+------------------+
| Id | User            | Host               | db     | Command     | Time | State                                                         | Info             |
+----+-----------------+--------------------+--------+-------------+------+---------------------------------------------------------------+------------------+
|  5 | event_scheduler | localhost          | NULL   | Daemon      | 2350 | Waiting on empty queue                                        | NULL             |
|  8 | root            | localhost          | sbtest | Query       |    0 | starting                                                      | show processlist |
| 15 | syncstndby      | 192.168.66.7:47894 | NULL   | Binlog Dump |  156 | Master has sent all binlog to slave; waiting for more updates | NULL             |
| 17 | sbtest_user     | 192.168.66.6:38130 | sbtest | Sleep       |    0 |                                                               | NULL             |
| 18 | sbtest_user     | 192.168.66.6:38132 | sbtest | Sleep       |    1 |                                                               | NULL             |
| 19 | sbtest_user     | 192.168.66.6:38134 | sbtest | Sleep       |    0 |                                                               | NULL             |
| 20 | sbtest_user     | 192.168.66.6:38136 | sbtest | Sleep       |    0 |                                                               | NULL             |
+----+-----------------+--------------------+--------+-------------+------+---------------------------------------------------------------+------------------+
7 rows in set (0.00 sec)

ठीक है अब से हम पहले साल्वे और मास्टर के साथ काम करेंगे।

तो सबसे पहले हम दास स्वामी को, Enforce_gtid_consistency ='चेतावनी' सेट करेंगे।

गुलाम 192.168.66.7

set global enforce_gtid_consistency = 'warn';

मास्टर 192.168.66.5

set global enforce_gtid_consistency = 'warn';

हम यहां कर रहे हैं और हम MySQL त्रुटि की जांच करेंगे त्रुटि लॉग देखें यह ठीक होना चाहिए; आपको त्रुटि लॉग में कोई त्रुटि नहीं दिखाई देगी। अगले चरण में हर जगह सेट ग्लोबल एनफोर्स_gtid_consistency='on' चलाना है और फिर तीर को फिर से देखना है।

गुलाम 192.168.66.7

set global enforce_gtid_consistency='on';

मास्टर 192.168.66.5

set global enforce_gtid_consistency='on';

तो, अगला चरण वैश्विक gtid_mode='off_permissive' सेट कर रहा है; तो फिर से मैं MySQL क्लाइंट शुरू करूँगा और इसे सेट करूँगा। और फिर हम त्रुटि लॉग की जांच करते हैं

गुलाम 192.168.66.7

set global gtid_mode='off_permissive';

मास्टर  192.168.66.5

set global gtid_mode='off_permissive';

प्रत्येक सर्वर पर हम gtid_mode='on_permissive' सेट करेंगे; ताकि हम इस बिंदु पर GTID लेनदेन उत्पन्न करें।

गुलाम 192.168.66.7

set global gtid_mode='on_permissive';

मास्टर  192.168.66.5

set global gtid_mode='on_permissive';

तो, यह हर जगह सेट है। आइए त्रुटि लॉग की जांच करें

ठीक है तो अब हम जांच करेंगे कि क्या किसी नोड में चल रहे अनाम लेन-देन हैं क्योंकि अगर यह तब है जब हम gtid_mode='on' सेट करते हैं, तो सर्वर अब अनाम लेनदेन स्वीकार नहीं करता है और हमें त्रुटियां मिलेंगी।

गुलाम 192.168.66.7

mysql> show status like 'ongoing_anonymous_transaction_count';
+-------------------------------------+-------+
| Variable_name                       | Value |
+-------------------------------------+-------+
| Ongoing_anonymous_transaction_count | 0     |
+-------------------------------------+-------+
1 row in set (0.22 sec)

मास्टर 192.168.66.5

mysql> show status like 'ongoing_anonymous_transaction_count';
+-------------------------------------+-------+
| Variable_name                       | Value |
+-------------------------------------+-------+
| Ongoing_anonymous_transaction_count | 0     |
+-------------------------------------+-------+
1 row in set (0.04 sec)

तो दोनों सर्वरों में नहीं है जिसका अर्थ है कि हम GTID को चालू करने के लिए तैयार हैं। मैं gtid_mode =on सक्षम कर दूंगा।

मास्टर 192.168.66.5

mysql> set global gtid_mode='on';

Query OK, 0 rows affected (0.03 sec)

गुलाम 192.168.66.7

mysql> set global gtid_mode='on';

Query OK, 0 rows affected (0.03 sec)

अब गुलामों पर, हमें मास्टर-ऑटो-पोजिशन =1

. का उपयोग करने के लिए प्रतिकृति को फिर से शुरू करने की आवश्यकता है

गुलाम 192.168.66.7

stop slave;
change master to master_auto_position=1;
start slave;

तो, यह क्या करता है, यह "चेंज मास्टर" यहाँ, अगर साल्वे थ्रेड पहले से ही कॉन्फ़िगर किया गया था, तो अगर कुछ पैरामीटर को चेंज मास्टर कमांड द्वारा छुआ नहीं गया है, तो यह केवल वर्तमान मान पर छोड़ दिया जाएगा।

आइए देखें कि दासों पर दास की स्थिति क्या है और स्वामी पर स्वामी की स्थिति क्या है। सब कुछ मुझे ठीक चल रहा होना चाहिए।

mysql> show salve status\G;

mysql> show master status;

अब माइग्रेशन हो गया है:

जैसा कि हम जानते हैं कि यदि आपके पास रोलबैक योजना नहीं है तो कोई भी अपग्रेड सफल नहीं होता है, रोल बैक करने के लिए कृपया अगला लेख पढ़ने के लिए नीचे दिए गए लिंक पर क्लिक करें।

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. सबक्वेरी का समाधान 1 से अधिक पंक्ति त्रुटि देता है

  2. MySQL प्रतिकृति समस्या निवारण:भाग एक

  3. mysql n अंतिम पंक्तियों में से चुनें

  4. कैसे पता चलेगा कि लेनदेन पहले ही शुरू हो चुका है?

  5. कैसे जांचें कि रेडियो बटन चेक किया गया है या jQuery में चुना गया है?