MySQL में SHOW SLAVE STATUS को समझने की कोशिश की जा रही है


11

मेरे पास एक मास्टर-स्लेव प्रतिकृति सेटअप है और ऐसा लगता है कि यह ठीक चल रहा है। नीचे SHOW SLAVE STATUSआदेश का एक परिणाम है :

show slave STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: *.*.*.*
                  Master_User: repliV1
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 10726644
               Relay_Log_File: mysqld-relay-bin.000056
                Relay_Log_Pos: 231871
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: data1
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 10726644
              Relay_Log_Space: 232172
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:

मैं के बारे में अधिक समझने के लिए चाहते हैं Relay_Log_File, Relay_Log_Posऔर Relay_Master_Log_File

मेरे प्रश्न हैं:

  • क्या यह सच है कि रिले लॉग फ़ाइल वह है जिसे चलाने के लिए प्रतिकृति के लिए स्थानीय रूप से पढ़ा और संग्रहीत किया जा रहा है?

  • उस relay_master_log_fileसमय के बारे में क्या ; यह कैसे अलग है Master_Log_File?

  • ये दोनों मूल्य क्या हैं, अर्थात। , Read_Master_Log_Posऔर Relay_Log_Pos? प्रतिकृति पूर्ण होने और सिंक में होने के बावजूद वे क्यों दिखाई दे रहे हैं?

  • क्या यह सच है कि ये फाइलें द्विआधारी प्रारूप में हैं, और इसलिए मैं उन्हें नहीं देख सकता हूं?

जवाबों:


8

मैं आगे समझना चाहता हूं कि Relay_Log_File, Relay_Log_Pos और Relay_Master_Log_File है।

से SHOW SLAVE STATUS\G, दो मान प्राप्त करें

  • Relay_Log_File : वर्तमान रिले लॉग प्रतिकृति के दौरान नई प्रविष्टियों को स्वीकार कर रहा है
  • Relay_Log_Pos : प्रतिकृति के दौरान नई प्रविष्टियों को स्वीकार करते हुए वर्तमान रिले लॉग की वर्तमान स्थिति
  • Relay_Master_Log_File : रिले लॉग फ़ाइल जिसमें मास्टर पर अंतिम सफलतापूर्वक निष्पादित एसक्यूएल स्टेटमेंट है जिसे दास पर निष्पादित किया गया था।
  • Master_Log_File: वर्तमान रिले लॉग फ़ाइल और वर्तमान रिले लॉग स्थिति से मेल खाने वाले मास्टर पर लॉग

फाइलें बाइनरी में हैं इसलिए उन्हें सही से देखने में सक्षम नहीं हैं

हां, आप रिले लॉग देख सकते हैं। चूंकि उनके पास नियमित बाइनरी लॉग के समान संरचना है, बस mysqlbinlog प्रोग्राम चलाएं । उदाहरण के लिए आप किसी भी रिले लॉग के भीतर एसक्यूएल देखने के लिए, जैसे कि पिछले एक, ऐसा करें:

mysqlbinlog mysqld-relay-bin.000056 > /root/SQLForCurrentRelayLog.txt
less /root/SQLForCurrentRelayLog.txt

अब मैं स्पष्ट हूँ कि Exec_Master_Log_Pos (क्या यह निष्पादक मास्टर लॉग पोज़िशन है) और जब तक कि यह कहाँ रुकना है?
newbie14

यहां छोटी सी गलती। SQL बाइनरी द्वारा निष्पादित सबसे हाल की ईवेंट वाली मास्टर बाइनरी लॉग फ़ाइल का Relay_Master_Log_Fileनाम है , रिले लॉग फ़ाइल नहीं
क्रिशोज १oj

@RolandoMySQLDBA ayudame porfavor dba.stackexchange.com/questions/177277/…
इवान

8

Relay_Master_Log_Fileवास्तव में दास पर अंतिम एसक्यूएल बयान वाले मास्टर पर बिनलॉग का नाम सफलतापूर्वक निष्पादित किया गया है। यह दास पर एक रिले लॉग का नाम नहीं है। देखें: http://dev.mysql.com/doc/refman/5.5/en/show-slave-status.html

Exec_Master_Log_Posrelay_master_log_file में स्थिति है कि दास SQL ​​थ्रेड तक निष्पादित हो गया है। तो आपके उदाहरण में, दास डीबी ने mysql-bin.000001मास्टर डब पर बिनलॉग पॉस 10726644 तक सभी कथनों को निष्पादित किया है ।

until_log_posवास्तव में केवल तब उपयोग किया जाता है जब आप अपने दास को वाक्य रचना के साथ शुरू करते हैं START SLAVE UNTIL master_log_pos = $integer। वह सिंटैक्स उस स्थिति तक दोहराएगा (यह होगा exec_master_log_pos) और फिर बंद हो जाएगा। आप सामान्य रूप से केवल यही करेंगे यदि आप एक विशिष्ट बिंदु को दोहराना चाहते थे, लेकिन आगे नहीं (जैसे कि यदि अगला बयान एक आकस्मिक तालिका ड्रॉप या कुछ है)। until_log_posजब यह निर्दिष्ट नहीं होता है, तो मान 0 होता है, इसलिए आपके मामले में इसका मतलब है कि प्रतिकृति बस आगे बढ़ती रहेगी।


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