MySQL主從複製中的“show slave status”詳細含義

lhrbest發表於2019-07-22

MySQL主從複製中的“show slave status”詳細含義


正常狀態的資訊

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 10.1.1.1

                  Master_User: rep_user

                  Master_Port: 3306

                Connect_Retry: 10

              Master_Log_File: binlog.000026

          Read_Master_Log_Pos: 446

               Relay_Log_File: relay.000008

                Relay_Log_Pos: 589

        Relay_Master_Log_File: binlog.000026

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              Replicate_Do_DB: 

          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: 446

              Relay_Log_Space: 878

              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: 

  Replicate_Ignore_Server_Ids: 

             Master_Server_Id: 2211

1 row in set (0.00 sec)


狀態解釋:

     1.Slave_IO_State: Waiting for master to send event

       這裡顯示了當前slave I/O執行緒的狀態。狀態資訊和使用show processlist顯示的內容一樣。

       slave I/O執行緒的狀態,有以下幾種:

       1) waiting for master update

           這是connecting to master狀態之前的狀態

      2) connecting to master

          I/O執行緒正嘗試連線到master

      3) checking master version

          在與master建立連線後,會出現該狀態。該狀態出現的時間非常短暫。

      4) registering slave on master

          在與master建立連線後,會出現該狀態。該狀態出現的時間非常短暫。  

       5) requesting binlog dump

           在與master建立連線後,會出現該狀態。該狀態出現的時間非常短暫。在這個狀態下,I/O執行緒向master傳送請求,請求binlog,位置從指定的binglog 名字和binglog的position位置開始。

       6) waiting to reconnect after a failed binlog dump request

           如果因為連線斷開,導致binglog的請求失敗,I/O執行緒會進入睡眠狀態。然後定期嘗試重連。嘗試重連的時間間隔,可以使用命令"change master to master_connect_trt=X;"改變。

       7) reconnecting after a failed binglog dump request

           I/O程式正在嘗試連線master

       8) waiting for master to send event

           說明,已經成功連線到master,正等待二進位制日誌時間的到達。如果master 空閒,這個狀態會持續很長時間。如果等待的時間超過了slave_net_timeout(單位是秒)的值,會出現連線超時。在這種狀態下,I/O執行緒會人為連線失敗,並開始嘗試重連

      9) queueing master event to the relay log

          此時,I/O執行緒已經讀取了一個event,並複製到了relay log 中。這樣SQL 執行緒可以執行此event

      10) waiting to reconnect after a failed master event read

          讀取時出現的錯誤(因為連線斷開)。在嘗試重連之前,I/O執行緒進入sleep狀態,sleep的時間是master_connect_try的值(預設是60秒)

      11) reconnecting after a failed master event read

          I/O執行緒正嘗試重連master。如果連線建立,狀態會變成"waiting for master to send event"

      12) waiting for the slave sql thread to free enough relay log space

         這是因為設定了relay_log_space_limit,並且relay log的大小已經整張到了最大值。I/O執行緒正在等待SQL執行緒透過刪除一些relay log,來釋放relay log的空間。

      13) waiting for slave mutex on exit

          I/O執行緒停止時會出現的狀態,出現的時間非常短。

   2. Master_Host: 10.1.8.62

       Master_User: rep_user

       Master_Port: 3306

       這3條資訊,顯示了slave連線master時,使用的master的主機---master_host、連線master用的使用者---master_user、連線master的埠---master_port。

   3. Connect_Retry: 10

      連線中斷後,重新嘗試連線的時間間隔。預設值是60秒。

   4. Master_Log_File: binlog.000026

       Read_Master_Log_Pos: 446

       這兩條資訊,顯示了與master相關的日誌的資訊。master_log_file:當前I/O執行緒正在讀取的master 二進位制日誌的檔名;read_master_log_pos:當前I/O執行緒正在讀取的二進位制日誌的位置

   5.  Relay_Log_File: relay.000008

        Relay_Log_Pos: 589

        Relay_Master_Log_File: binlog.000026

        這3條資訊,顯示了與relay log相關的資訊。relay_log_file:當前SQL執行緒正在讀取並執行的relay log的檔名;relay_log_pos:當前SQL執行緒正在讀取並執行的relay log檔案的位置;relay_master_log_file:master 二進位制日誌的檔名。該檔案包含當前SQL執行的事物

   6.  Slave_IO_Running: Yes

        Slave_SQL_Running: Yes

        顯示了當前I/O執行緒和SQL執行緒的狀態

   7.  Replicate_Do_DB: 

        Replicate_Ignore_DB: 

        Replicate_Do_Table: 

        Replicate_Ignore_Table: 

        Replicate_Wild_Do_Table: 

        Replicate_Wild_Ignore_Table:

        這部分顯示的是關於複製DB和table的資訊。

   8.  Last_Errno: 0

        Last_Error: 

        laster_errno和laster_error是 Last_SQL_Errno和Last_SQL_Error的同義詞。

  9.  Skip_Counter: 0

       系統引數sql_slave_skip_counter的值。sql_slave_skip_counter:slave應該跳過的事件數

  10. Exec_Master_Log_Pos: 446

       sql執行緒當前執行的事件,在master 二進位制日誌中的position

  11. Relay_Log_Space: 878

        所有存在relay log的大小

  12. Seconds_Behind_Master: 0

       這個值是時間戳的差值。是slave當前的時間戳和master記錄該事件時的時間戳的差值

  13. Replicate_Ignore_Server_Ids: 

       slave當前會跳過的事件號

  14. Master_Server_Id: 2211

       master的server-id;如果master和slave的server-id相同,在啟動slave時,會報錯



在搭建好mysql主從之後,我們一般在從庫上透過命令

show slave status\G

 

 來檢視主從的狀態,會有很多的引數,接下來筆者就帶大家好好的瞭解這些引數

 

root@localhost (none)>show slave status\G*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.100
                  Master_User: mysync
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.001822
          Read_Master_Log_Pos: 290072815
               Relay_Log_File: mysqld-relay-bin.005201
                Relay_Log_Pos: 256529594
        Relay_Master_Log_File: mysql-bin.001821
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          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: 256529431
              Relay_Log_Space: 709504534
              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: 2923Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 13ee75bb-99e2-11e6-be4d-b499baa80e6e
             Master_Info_File: /home/data/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Reading event from the relay log
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 01 row in set (0.02 sec)

 

引數詳解:

 

1. Slave_IO_State

這裡顯示了當前slave I/O執行緒的狀態(slave連線到master的狀態)。狀態資訊和使用show processlist | grep "system user"(會顯示兩條資訊,一條slave I/O執行緒的,一條是slave SQL執行緒的)顯示的內容一樣。

 

slave I/O執行緒的狀態,有以下幾種:

        1) waiting for master update

            這是connecting to master狀態之前的狀態

        2) connecting to master

           I/O執行緒正嘗試連線到master

        3) checking master version

           在與master建立連線後,會出現該狀態。該狀態出現的時間非常短暫。

        4) registering slave on master

           在與master建立連線後,會出現該狀態。該狀態出現的時間非常短暫。  

        5) requesting binlog dump

            在與master建立連線後,會出現該狀態。該狀態出現的時間非常短暫。在這個狀態下,I/O執行緒向master傳送請求,請求binlog,位置從指定的binglog 名字和binglog的position位置開始。

        6) waiting to reconnect after a failed binlog dump request

            如果因為連線斷開,導致binglog的請求失敗,I/O執行緒會進入睡眠狀態。然後定期嘗試重連。嘗試重連的時間間隔,可以使用命令"change master to master_connect_trt=X;"改變。

        7) reconnecting after a failed binglog dump request

            I/O程式正在嘗試連線master

        8) waiting for master to send event

            說明,已經成功連線到master,正等待二進位制日誌時間的到達。如果master 空閒,這個狀態會持續很長時間。如果等待的時間超過了slave_net_timeout(單位是秒)的值,會出現連線超時。在這種狀態下,I/O執行緒會人為連線失敗,並開始嘗試重連

        9) queueing master event to the relay log

           此時,I/O執行緒已經讀取了一個event,並複製到了relay log 中。這樣SQL 執行緒可以執行此event

        10) waiting to reconnect after a failed master event read

           讀取時出現的錯誤(因為連線斷開)。在嘗試重連之前,I/O執行緒進入sleep狀態,sleep的時間是master_connect_try的值(預設是60秒)

        11) reconnecting after a failed master event read

           I/O執行緒正嘗試重連master。如果連線建立,狀態會變成"waiting for master to send event"

        12) waiting for the slave sql thread to free enough relay log space

          這是因為設定了relay_log_space_limit,並且relay log的大小已經整張到了最大值。I/O執行緒正在等待SQL執行緒透過刪除一些relay log,來釋放relay log的空間。

        13) waiting for slave mutex on exit

           I/O執行緒停止時會出現的狀態,出現的時間非常短。

 

2. Master_Host: 192.168.1.100

mysql主庫的ip地址

 

3. Master_User: mysync

這個是master上面的一個使用者。用來負責主從複製的使用者,建立主從複製的時候建立的(具有reolication slave許可權)。

 

4. Master_Port: 3306

master伺服器的埠  一般是3306

 

5. Connect_Retry: 60

連線中斷後,重新嘗試連線的時間間隔。預設值是60秒。

 

#與master相關的日誌的資訊

6. Master_Log_File: mysql-bin.001822

當前I/O執行緒正在讀取的主伺服器二進位制日誌檔案的名稱。

7. Read_Master_Log_Pos: 290072815

當前I/O執行緒正在讀取的二進位制日誌的位置。

 

#與relay log相關的資訊

8. Relay_Log_File: mysqld-relay-bin.005201

當前slave SQL執行緒正在讀取並執行的relay log的檔名。

9. Relay_Log_Pos: 256529594

當前slave SQL執行緒正在讀取並執行的relay log檔案中的位置;(Relay_Log_File下的Relay_Log_Pos其實一一對應著Relay_Master_Log_File的Exec_Master_Log_Pos。)

10. Relay_Master_Log_File: mysql-bin.001821

當前slave SQL執行緒讀取並執行的relay log的檔案中多數近期事件,對應的主伺服器二進位制日誌檔案的名稱。(說白點就是我SQL執行緒從relay日誌中讀取的正在執行的sql語句,對應主庫的sql語句記錄在主庫的哪個binlog日誌中)

 

#slave I/O和SQL執行緒的狀態(重要)

11. Slave_IO_Running: Yes

I/O執行緒是否被啟動併成功地連線到主伺服器上。

12. Slave_SQL_Running: Yes

SQL執行緒是否被啟動。

 

13. Replicate_Do_DB

  Replicate_Ignore_DB

  Replicate_Do_Table

  Replicate_Ignore_Table

  Replicate_Wild_Do_Table

  Replicate_Wild_Ignore_Table

這些引數都是為了用來指明哪些庫或表在複製的時候不要同步到從庫,但是這些引數用的時候要小心,因為 當跨庫使用的時候 可能會出現問題。

一般情況下 ,限制的時候都用Replicate_Wild_Ignore_Table這個引數。

 

14. Last_Errno: 0

  Last_Error

slave的SQL執行緒讀取日誌引數的的錯誤數量和錯誤訊息。錯誤數量為0並且訊息為空字串表示沒有錯誤。

如果Last_Error值不是空值,它也會在從屬伺服器的錯誤日誌中作為訊息顯示。 

 

15. Skip_Counter: 0

SQL_SLAVE_SKIP_COUNTER的值,用於設定跳過sql執行步數。

 

16. Exec_Master_Log_Pos: 256529431

slave SQL執行緒當前執行的事件,對應在master相應的二進位制日誌中的position。(結合Relay_Master_Log_File理解,而且在Relay_Master_Log_File這個值等於Master_Log_File值的時候,Exec_Master_Log_Pos是不可能超過Read_Master_Log_Pos的。)

 

17. Relay_Log_Space: 709504534

所有原有的中繼日誌結合起來的總大小。

 

18. Until_Condition: None

  Until_Log_File:

  Until_Log_Pos: 0

在START SLAVE語句的UNTIL子句中指定的值。

 

Until_Condition具有以下值:

1) 如果沒有指定UNTIL子句,則沒有值

2) 如果從屬伺服器正在讀取,直到達到主伺服器的二進位制日誌的給定位置為止,則值為Master

3) 如果從屬伺服器正在讀取,直到達到其中繼日誌的給定位置為止,則值為Relay

Until_Log_File和Until_Log_Pos用於指示日誌檔名和位置值。日誌檔名和位置值定義了SQL執行緒在哪個點中止執行。

 

19. Master_SSL_Allowed: No

  Master_SSL_CA_File: 

  Master_SSL_CA_Path: 

  Master_SSL_Cert: 

  Master_SSL_Cipher: 

  Master_SSL_Key:

  Master_SSL_Verify_Server_Cert: No 

  Master_SSL_Crl: 

  Master_SSL_Crlpath:

 

這些欄位顯示了被從屬伺服器使用加密相關的引數。這些引數用於連線主伺服器。

Master_SSL_Allowed具有以下值:

1) 如果允許對主伺服器進行SSL連線,則值為Yes

2) 如果不允許對主伺服器進行SSL連線,則值為No

3) 如果允許SSL連線,但是從屬伺服器沒有讓SSL支援被啟用,則值為Ignored。

 

與SSL有關的欄位的值對應於–master-ca,–master-capath,–master-cert,–master-cipher和–master-key選項的值。

 

20. seconds_Behind_Master: 2923

這個值是時間戳的差值。是slave當前的時間戳和master記錄該事件時的時間戳的差值。

 

21. Last_IO_Errno: 0

  Last_IO_Error: 

  Last_SQL_Errno: 0

  Last_SQL_Error: 

  最後一次I/O執行緒或者SQL執行緒的錯誤號和錯誤訊息。

 

22. Replicate_Ignore_Server_Ids: 

主從複製,從庫忽略的主庫伺服器Id號。就是不以這些伺服器Id為主庫。

 

23. Master_Server_Id: 1

  Master_UUID: 13ee75bb-99e2-11e6-be4d-b499baa80e6e

  Master_Info_File: /home/data/mysql/master.info

  分別表示主庫伺服器id號,主庫伺服器的UUID好,還有在從庫中儲存主庫伺服器相關的目錄位置。

 

24. SQL_Delay: 0

一個非負整數,表示秒數,Slave滯後多少秒於master。

 

25. SQL_Remaining_Delay: NULL

當 Slave_SQL_Running_State 等待,直到MASTER_DELAY秒後,Master執行的事件,此欄位包含一個整數,表示有多少秒左右的延遲。在其他時候,這個欄位是NULL。

 

26. Slave_SQL_Running_State: Reading event from the relay log

SQL執行緒執行狀態:

 1) Reading event from the relay log

執行緒已經從中繼日誌讀取一個事件,可以對事件進行處理了。

 2) Has read all relay log; waiting for the slave I/O thread to update it

執行緒已經處理了中繼日誌檔案中的所有事件,現在正等待I/O執行緒將新事件寫入中繼日誌。

  3) Waiting for slave mutex on exit

執行緒停止時發生的一個很簡單的狀態。

 

27. Master_Retry_Count: 86400

連線主庫失敗最多的重試次數。

 

28. Master_Bind: 

slave從庫在多網路介面的情況下使用,以確定用哪一個slave網路介面連線到master。

 

29. Last_IO_Error_Timestamp: 

  Last_SQL_Error_Timestamp: 

    最後一次I/O執行緒或者SQL執行緒錯誤時的時間戳。

 

#GTID模式相關

30. Retrieved_Gtid_Set: 

  獲取到的GTID<IO執行緒>

 

  Executed_Gtid_Set: 

  執行過的GTID<SQL執行緒>

 

  Auto_Position: 0

 

 

 

理解與應用

 

  1、為什麼執行stop slave; 再start slave;可以繼續主從關係呢?

 

 其實執行stop slave;就是分別關閉了I/O執行緒(stop slave IO_THREAD;)和SQL執行緒(stop slave SQL_THREAD;),I/O執行緒會維護master.info資訊的更新,SQL執行緒會維護relay-log.info資訊的更新,在執行start slave;時候,會依照master.info和relay-log.info資訊,繼續執行I/O執行緒和SQL執行緒。

 

  2、怎樣從一個從庫再複製一個新的從庫呢?

 

 步驟:

    1. 在從庫上面stop slave IO_THREAD;關閉IO執行緒

    2. 等待SQL執行緒執行完成,當Relay_Master_Log_File和Master_Log_File二進位制日誌檔名一致,且Exec_Master_Log_Pos等於Read_Master_Log_Pos值。 

    3. mysqldump匯出所需要的庫,到新的從庫伺服器,並匯入。

    4. 主庫授權replication slave許可權給新的從庫

    5. 新的從庫使用change master to命令,master_log_file對應Master_Log_File值,master_log_pos對應Read_Master_Log_Pos值。

    6. 在從庫執行start slave IO_THREAD;和在新的從庫上執行start slave;





About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub、部落格園、CSDN和個人微 信公眾號( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文部落格園地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址:

........................................................................................................................

● QQ群號: 230161599 (滿) 、618766405

● 微 信群:可加我微 信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友 646634621 ,註明新增緣由

● 於 2019-07-01 06:00 ~ 2019-07-31 24:00 在西安完成

● 最新修改時間:2019-07-01 06:00 ~ 2019-07-31 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的微店

小麥苗出版的資料庫類叢書 http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網路班 http://blog.itpub.net/26736162/viewspace-2148098/

小麥苗騰訊課堂主頁 https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客戶端 掃描下面的二維碼來關注小麥苗的微 信公眾號( xiaomaimiaolhr )及QQ群(DBA寶典)、新增小麥苗微 信, 學習最實用的資料庫技術。

........................................................................................................................

歡迎與我聯絡

 

 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2651332/,如需轉載,請註明出處,否則將追究法律責任。

相關文章