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