最近在準(zhǔn)備看MySQL相關(guān)的內(nèi)容,簡單的整理一下binlog的原理,加深理解丧鸯。
binlog基本認(rèn)識(shí)
MySQL中的binlog是一個(gè)二進(jìn)制文件,它記錄了所有的增刪改操作逼友。節(jié)點(diǎn)之間的復(fù)制就是依靠binlog來完成的。binlog具有三種模式:
- Row模式
日志中會(huì)記錄成每一行數(shù)據(jù)被修改的日志壶愤,然后在slave端再對(duì)相同的數(shù)據(jù)進(jìn)行修改怜庸。例如:update xxx where id in(1,2,3,4,5);采用該模式則會(huì)記錄5條記錄。 - statement模式
每一條會(huì)修改數(shù)據(jù)的sql都會(huì)記錄到 master的binlog中米绕。slave在復(fù)制的時(shí)候sql Thread
會(huì)解析成和原來master端執(zhí)行過的相同的sql來再次執(zhí)行. - mixed模式
Mixed即混合模式,MySQL會(huì)根據(jù)執(zhí)行的每一條具體的sql語句來區(qū)分對(duì)待記錄的日志形式瑟捣,也就是在Statement和Row之間選擇一種。
新版本中的Statment level還是和以前一樣栅干,僅僅記錄執(zhí)行的語句迈套。而新版本的MySQL中隊(duì)row level模式也被做了優(yōu)化,并不是所有的修改都會(huì)以row level來記錄碱鳞,像遇到表結(jié)構(gòu)變更的時(shí)候就會(huì)以statement模式來記錄桑李,如果sql語句確實(shí)就是update或者delete等修改數(shù)據(jù)的語句,那么還是會(huì)記錄所有行的變更劫笙。
binlog之主從同步流程
大體執(zhí)行流程:
Master執(zhí)行完增刪改操作后都會(huì)記錄binlog日志,當(dāng)需要同步的時(shí)候會(huì)主動(dòng)通知slave節(jié)點(diǎn),slave收到通知后使用
IO Thread
主動(dòng)去master讀取binlog日志
,然后異步寫入relay
日志(中轉(zhuǎn)日志),然后使 SQL Thread
完成對(duì)`relay日志 的解析然后入庫操作,完成同步芙扎。