mysql主從複製
1. 主從複製的主要功能
- 1)數據分佈
在不同的數據中心實現數據的複製。
- 2)讀取的負載均衡
建立多個從服務器,將讀取操作分散到從服務器,降低主服務器壓力。
- 3)數據庫備份
複製對備份很有幫助,但是從服務器不是備份,不能完全替代備份。
- 4)高可用性和故障轉移
通過複製建立的從服務器有助於故障轉移,減少故障的停機時間和恢復時間。
2. 複製的工作原理
- 1) 主服務器將更改記錄到二進制日誌(binlog)中
- 2) 從服務器把主服務器的二進制日誌複製到自己的中繼日誌(relay log)中
- 3) 從服務器重做中繼日誌中日誌,把更改應用到自己的數據庫上,以達到數據的最終一致性
注意複製是異步實時的,存在主從執行延遲。複製的工作原理如下圖所示:
從服務器有兩個線程:
- 一個是I/O線程,負責讀取主服務器的二進制日誌
- 一個是sql線程,複製執行中繼日誌
主從同步並非完全同步,可通過show salve status和show master status命令查看同步狀況。
下面是show salve status的主要變量:
Master_Log_File: SLAVE中的I/O線程當前正在讀取的主服務器二進制日誌文件的名稱
Read_Master_Log_Pos: 在當前的主服務器二進制日誌中,SLAVE中的I/O線程已經同步的偏移量位置
Relay_Log_File: SQL線程當前正在讀取和執行的中繼日誌文件的名稱
Relay_Log_Pos: 在當前的中繼日誌中,SQL線程已讀取和執行的位置
Relay_Master_Log_File: 由SQL線程執行的包含多數近期事件的主服務器二進制日誌文件的名稱
Slave_IO_Running: I/O線程是否被啓動併成功地連接到主服務器上
Slave_SQL_Running: SQL線程是否被啓動
Seconds_Behind_Master: 從屬服務器SQL線程和從屬服務器I/O線程之間的時間差距,單位以秒計。
延遲的判斷:
- 通過主服務器上面的Position-Read_Master_Log_Pos 就可得知I/O線程的延遲。
- Seconds_Behind_Master
其值有這麼幾種:
NULL - 表示io_thread或是sql_thread有任何一個發生故障,也就是該線程的Running狀態是No,而非Yes.
0 - 該值爲零,是我們極爲渴望看到的情況,表示主從複製良好,可以認爲lag不存在。
正值 - 表示主從已經出現延時,數字越大表示從庫落後主庫越多。
負值 - 幾乎很少見,只是聽一些資深的DBA說見過,其實,這是一個BUG值,該參數是不支持負值的,也就是不應該出現。