MySQL主從複製原理和參數

@MySQL複製(replication)原理
1)主服務器(master)把數據更改記錄到二進制日誌(binlog)中。
2)從服務器(slave)把主服務器的二進制日誌複製到自己的中繼日誌(relay log)中。
3)從服務器重做中繼日誌中的日誌,把更改應用到自己的數據庫上,以達到數據的最終一致性。

注意:複製不是完全實時地進行同步,而是異步實時。

@從服務器有2個線程
I/O線程,負責讀取主服務器的二進制日誌,並將其保存爲中繼日誌;
SQL線程,複製執行中繼日誌。

 

@SHOW FULL PROCESSLIST
(1)查看從服務器狀態,可以看到類似如下內容:

mysql>SHOW FULL PROCESSLIST\G;
*************************** 1. row ***************************
      Id: 1
    User: system user
    Host:
      db: NULL
 Command: Connect
    Time: 6501
   State: Waiting for master to send event
    Info: NULL
*************************** 2. row ***************************
      Id: 2
    User: system user
    Host:
      db: NULL
 Command: Connect
    Time: 0
   State: Has read all relay log; waiting for the slave I/O thread to update it
    Info: NULL
*************************** 3. row ***************************
      Id: 206
    User: root
    Host: localhost
      db: NULL
 Command: Query
    Time: 0
   State: NULL
    Info: SHOW FULL PROCESSLIST
3 rows in set (0.00 sec)

說明:ID爲1的線程是I/O線程,目前的狀態是等待主服務器發送二進制日誌。ID爲2的線程是SQL線程,負責讀取中繼日誌並執行。目前的狀態是已讀取所有的中繼日誌,等待中繼日誌被I/O線程更新。

(2)查看主服務器狀態,可以看到類似如下內容:

mysql>SHOW FULL PROCESSLIST\G;
……
*************************** 65. row ***************************
      Id: 26541
    User: rep
    Host: 192.168.190.98:39549
      db: NULL
 Command: Binlog Dump
    Time: 6857
   State: Has sent all binlog to slave; waiting for binlog to be updated
    Info: NULL
……

說明:可以看到一個線程負責發送二進制日誌。

@SHOW SLAVE STATUS和SHOW MASTER STATUS

(1)SHOW SLAVE STATUS命令可以觀察當前複製的運行狀態:

mysql>SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.190.10
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000007
          Read_Master_Log_Pos: 555176471
               Relay_Log_File: gamedb-relay-bin.000048
                Relay_Log_Pos: 224355889
        Relay_Master_Log_File: mysql-bin.000007
             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: mysql.%,DBA.%
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 555176471
              Relay_Log_Space: 224356045
              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:
1 row in set (0.00 sec)

一些主要參數說明如下,

Slave_IO_State: Waiting for master to send event 顯示當前IO線程的狀態,如等待主服務器發送二進制日誌
Master_Log_File: mysql-bin.000007 顯示當前同步的主服務器的二進制日誌
Read_Master_Log_Pos: 555176471 顯示當前同步的主服務器的二進制日誌的偏移量位置,單位是字節。如當前已同步mysql-bin.000007這個日誌文件的529MB  (555176471M)內容
Relay_Master_Log_File: mysql-bin.000007 當前中繼日誌同步的二進制日誌
Relay_Log_File: gamedb-relay-bin.000048 顯示當前寫入的中繼日誌
Relay_Log_Pos: 224355889 顯示當前執行到中繼日誌的偏移位置
Slave_IO_Running: Yes 從服務器中IO線程的運行狀態,YES表示運行正常
Slave_SQL_Running: Yes 從服務器中SQL線程的運行狀態,YES表示運行正常
Exec_Master_Log_Pos: 555176471 表示同步到主服務器的二進制日誌偏移量的位置。(Read_Master_Log_Pos-Exec_Master_Log_Pos)可以表示當前SQL線程運行的延時,單位是字節。該例主從服務器完全同步

 

 

 

 

 

 

 

 

(2)SHOW MASTER STATUS命令可以用來查看主服務器中二進制日誌的狀態:

mysql>SHOW MASTER STATUS\G;
*************************** 1. row ***************************
            File: mysql-bin.000007
        Position: 606181078
    Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.01 sec)

當前二進制日誌記錄了偏移量606181078的位置,該值減去這一時間點時從服務器上的Read_Master_Log_Pos,就可以得知I/O線程的延時

 

參考資料:《MySQL技術內幕:InnoDB存儲引擎(第2版)》 姜承堯,章節8.7 複製

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章