日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

mysql binlog日志的三种模式

發(fā)布時間:2025/3/20 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql binlog日志的三种模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、statement level模式

每一條會修改數(shù)據(jù)的sql都會記錄到master的bin-log中。slave在復(fù)制的時候sql進程會解析成和原來master端執(zhí)行過的相同的sql來再次執(zhí)行。
優(yōu)點:statement level下的優(yōu)點,首先就是解決了row level下的缺點,不需要記錄每一行數(shù)據(jù)的變化,減少bin-log日志量,節(jié)約io,提高性能。因為他只需要記錄在master上所執(zhí)行的語句的細節(jié),以及執(zhí)行語句時候的上下文的信息。
缺點:由于它是記錄的執(zhí)行語句,所以為了讓這些語句在slave端也能正確執(zhí)行,那么他還必須記錄每條語句在執(zhí)行的時候的一些相關(guān)信息,也就是上下文信息,以保證所有語句在slave端被執(zhí)行的時候能夠得到和在master端執(zhí)行時候相同的結(jié)果。另外就是,由于mysql現(xiàn)在發(fā)展比較快,很多的新功能加入,使mysql的復(fù)制遇到了不小的挑戰(zhàn),自然復(fù)制的時候涉及到越復(fù)雜的內(nèi)容,bug也就越容易出現(xiàn)。在statement level下,目前已經(jīng)發(fā)現(xiàn)的就有不少情況會造成mysql的復(fù)制問題,主要是修改數(shù)據(jù)的時候使用了某些特定的函數(shù)或者功能的時候會出現(xiàn),比如sleep()在有些版本就不能正確復(fù)制。

?

2、rowlevel模式

日志中會記錄成每一行數(shù)據(jù)被修改的形式,然后在slave端再對相同的數(shù)據(jù)進行修改
優(yōu)點:bin-log中可以不記錄執(zhí)行的sql語句的上下文相關(guān)的信息,僅僅只需要記錄那一條記錄被修改了,修改成什么樣了。所以row level的日志的內(nèi)容會非常清楚的記錄下每一行數(shù)據(jù)修改的細節(jié)。而且不會出現(xiàn)某些特定情況下的存儲過程,或function,以及trigger的調(diào)用和觸發(fā)無法被正確復(fù)制的問題。
缺點:row level下,所有的執(zhí)行的語句當(dāng)記錄到日志中的時候,都將以每行記錄的修改記錄,這樣可能會產(chǎn)生大量的日志內(nèi)容,比如有這樣一條update語句:update product set owner_member_id='d' where owner_member_id='a',執(zhí)行之后,日志中記錄的不是這條update語句所對應(yīng)的事件(mysql是以事件的形式來記錄bin-log日志),而是這條語句所更新的每一條記錄的變化情況,這樣就記錄成很多條記錄被更新的很多事件。自然,bin-log日志的量會很大。

?

3、mixed模式
實際上就是前兩種模式的結(jié)合,在mixed模式下,mysql會根據(jù)執(zhí)行的每一條具體的sql語句來區(qū)分對待記錄的日志形式,也就是在statement和row之間選一種。新版本中的statement level還是和以前一樣,僅僅記錄執(zhí)行的語句。而新版本的mysql中對row level模式被做了優(yōu)化,并不是所有的修改都會以row level來記錄,像遇到表結(jié)構(gòu)變更的時候就會以statement模式來記錄,如果sql語句確實就是update或者delete 等修改數(shù)據(jù)的語句,那么還是會記錄所有行的變更。

?

調(diào)整binlog日志模式

mysql> show variables like '%binlog_format%'; +---------------+-----------+ | Variable_name | Value | +---------------+-----------+ | binlog_format | STATEMENT | +---------------+-----------+ 1 row in set (0.00 sec)set global binlog_format = '?'原本是statement level,然后我改成了row level模式,然后切割一下binlog,接著對數(shù)據(jù)庫進行一些操作,然后去最新的bin-log日志里面用下列語句查看內(nèi)容 mysqlbinlog --base64-output=decode-rows -v mysql-bin.000016

  

轉(zhuǎn)載于:https://www.cnblogs.com/bill2014/p/7255680.html

總結(jié)

以上是生活随笔為你收集整理的mysql binlog日志的三种模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。