MySQL-binlog格式对主从复制的影响MySQL主从复制的过程
文章目錄
- 生猛干貨
- 官方文檔
- 主從復制的分類
- 基于SQL語句的復制-SBR
- 優點
- 缺點
- 基于行的復制 RBR
- 優點
- 缺點
- MySQL主從復制的過程
- 搞定MySQL
生猛干貨
帶你搞定MySQL實戰,輕松對應海量業務處理及高并發需求,從容應對大場面試
官方文檔
https://dev.mysql.com/doc/
如果英文不好的話,可以參考 searchdoc 翻譯的中文版本
http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.coder114.cn.html
主從復制的分類
根據主節點配置的binlog的格式,可以分為
-
基于SQL語句的復制(statement-based replication,SBR),
這種情況是主節點的binlog格式為 STATEMENT
-
基于行的復制(row-based replication,RBR),
這種情況是主節點的binlog格式為ROW
-
混合模式復制(mixed-based replication,MBR)。
這種情況是主節點的binlog格式為MIXED
我們來看下,這三種格式對 主從復制的影響
基于SQL語句的復制-SBR
MySQL5.1.4 之前只有這種模式。 又稱之為邏輯復制 。
主庫記錄SQL修改語句,從庫回放這些SQL 。
優點
- 基于段的模式,binlog相對較小,因此生成的日志量少,節省網絡傳輸I/O
- 并不要求主從數據庫的表的定義完全相同。舉個例子,比如主從上有個表的類型不同,但是是兼容的,碰巧這個表也是個大表 ,這樣的話修改大表,可以先在從庫修改,再切過去。
- 相比基于行的復制方式更為靈活
缺點
- 基于段的模式,對于非確定性的時間,無法保證主從復制的一致性, 比如UUID, now等函數(因為是執行SQL,那uuid這種函數相同的可能性基本為0),造成主從復制鏈路的中斷
- 對于存儲過程,觸發器,自定義函數修改也可能造成數據不一致
- 相比基于行的復制方式在從節點上執行需要更多的行鎖 。 當執行一條批量的SQL,在主庫上鎖定了一批數據,那么在從節點上也要鎖定相同的一批數據。
基于行的復制 RBR
主庫的二進制日志格式為ROW。
優點
- 因為binlog的格式row,所以可以應用于任何SQL的復制,包括非確定函數,存儲過程、自定義函數等。因為它同步過去的是值,舉個例子,UUID,從庫執行的時候不是重新執行UUID,而是把主庫的這個已經生成的值直接同步到從節點上。
- 可以減少數據庫鎖的使用
缺點
- 要求主從數據庫的表結構必須要相同,對于相同的列,即使順序不同,有可能會引起主從中斷
- 無法在從節點單獨執行觸發器,有的時候你只想在從庫上執行一些操作,是不行的。 但基于SQL語句的沒問題,執行那些變更的SQL就行了,但是基于行的就不行了。
MySQL主從復制的過程
1.主節點將變更寫入binlog , 因此主節點必須開啟binlog .
2. 從節點讀取主節點的binlog,并保存到從服務本地的relay log 中繼日志
要完成保存到中繼日志中,從服務器啟動一個I/O 線程,連接到主庫,主庫上啟動 bin log dump線程,從節點讀取。
3. 啟動SQL Log線程,在從節點上重返relay_log中的日志
基于SQL段的日志是在從庫上重新執行記錄的SQL
基于Row的日志這是在從庫上直接應用對數據庫行的修改
搞定MySQL
總結
以上是生活随笔為你收集整理的MySQL-binlog格式对主从复制的影响MySQL主从复制的过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL-日志二进制日志binlog初
- 下一篇: MySQL-高可用架构探索