標籤:
Mysql Classic Replication
一、傳統複製的組成:
1、master server:
使用者寫資料。
產生binlog。
2、slave server:
接收master傳來的binlog。
應用這些binlog從而達到重現master的使用者操作。
二、傳統複製的原理:
1、master跟新的資料,要寫binlog。
2、slave在master註冊一個i/o_thread進程,來捕獲binlog日誌的變更。
3、i/o_thread截取日誌變更之後寫入到本地的relay log裡。
4、然後通過sql_thread到relay log 裡進行解析執行到slave端。
5、在解析的過程中會判斷是否存在主鍵,如果沒有,在查看是否有二級索引,如果沒有,就直接全表掃描。
三、binlog的主要作用:
1、記錄master變更的記錄檔。
2、記錄的格式分為statement(SBR)、ROW(RBR)、MIXED格式。
3、Event是binlog的最小單位。
4、transaction是由多event組成。
5、binlog由兩種檔案組成:一種是binary log file;另一種是binary log index
四、binlog的三種日誌格式:
1、STATEMENT:記錄的是邏輯操作,即使用者執行過的sql。
2、ROW:記錄的是物理操作,即使用者實際修改的資料。
3、MIXED:預設使用statement記錄,當遇見不確定的資料時,自動幻化為ROW格式。
注意:
所有的DCL和DDL都是用statement格式記錄。
statement是一個sql對應一個event。
row是一個sql對應多個event。
五、statement和row格式的優缺點:
(一)、statement格式:
優點:
1、binlog檔案較小。
2、包含所有使用者執行的原始sql,方便統計和審計。
3、可以認為聽過binlog資料還原某些操作。
4、主從的binlog 版本協議相容性較好。
缺點:
1、存在安全隱患,可能導致主從不一致。(非常嚴重了,一般不適用生產環境)
2、對一些特殊函數賦值不準確或者不能複製。
例如:
LOAD_FILE()
UUID()
USER()
FOUND_ROWS()SYSDATA()
(二)、row格式:
優點:
1、相比statement更加安全的複製格式。(選row模式的更大原因)
2、在某些情況下複製速度更快。(複雜sql,表有主鍵)
3、產生比statement更少的鎖。
4、所有特殊函數都能複製。
缺點:
1、binlog檔案較大。在MySQL-5.6新特性參數binlog_row_image解決此問題。
2、單sql全表更新會產生大量binlog。
3、無法從binlog看見使用者執行的sql。MySQL-5.6新特性參數binlog_rows_query_log_event解決此問題。
4、由於binlog太大,容易造成主從複製端的延遲。
六、搭建傳統方式必要的參數:(一個是資料file,一個是位置pos)
(一)、master端:
1、擷取master當前的資料快照,並擷取當前的binlog號和pos號。
2、資料快照可以通過mysqldump或者Xtrabackup擷取。
3、也可以停機考配資料檔案。(此功能在5.6已經不能使用)
(二)、slave端:
1、通過擷取資料快照搭建一個mysql伺服器。
2、然後通過快照的master的binlog檔案和pos來開啟複製。
七、傳統複製日誌補齊的方式:
問題:(一主兩從結構)
當master1掛掉了,需要slave1專程master,但是發現slave1的binlog記錄已經到了100,而slave2記錄的binlog只到90,基於傳統日誌怎麼樣進行補齊?
解決方案:
1、如果沒有用到mha,就會選擇slave1作為主庫。
2、並在slave1上做show master status得到master的log便宜量。
3、然後在slave2上執行change語句。掛在到slave1上。
注意:
1、按照傳統的方式很容易出現資料不一致,因為slave2上的90~100之間的資料已經不能同步到slave2上了。
2、這個時候可以利用mha來補救之間的資料。
3、但是在GTID出現之後,MHA已經沒有價值了,因為GTID會在master_auto_postion=1;然後自己去匹配GTID的斷點,進行資料的不救。
MySQL傳統的同步複製的概念和要點