MySQL二进制日志的三种模式解析
原文出自 http://www.abcdocker.com/abcdocker/213
Row Level 行模式
日志會記錄每一行數據被修改的形式,然后在slave端再對相同的數據進行修改
優點:在 row level模式下,bin-log中可以不記錄執行sql語句的上下文相關的信息,僅僅只需要記錄哪一條被修改。所以row level的日志內容會非常清楚的記錄每一行數據修改的細節。不會出現某些特定的情況下的儲存過程或者function,以及trigger的調用和觸發無法被正確復制的問題。
缺點:row level 所有的執行的語句當記錄到日志中的是后,都將以每行記錄的修改來記錄,會產生大量的日志內容。
Statement Leve (默認)
每一條會修改數據的sql語句都會記錄到master的bin-log中。slave在復制的時候sql進程會解析成和原來master端執行過的的相同的sql來再次執行。
優點:statement leve下的優點就是解決了row level下的缺點,不需要記錄每一行的數據變化,減少bin-log日志量,節約IO,提高性能。
缺點:由于只記錄,所以,在statement level下已經發現不少情況會造成MySQL的復制出現問題,主要是修改數據庫的時候使用某些特定的函數或者功能的是會出現。
Mixed 自動模式
在該模式下,MySQL會根據執行的sql語句來區分對待記錄日志的格式,也就是在statement和Row之前選擇一種,如果sql語句確實就是update或者delete等修改數據的語句,那么還會記錄所有行的變更。
###解析行模式和語句模式的區別
如果我們有要刪除一百萬條記錄,在行模式(ROW )日志會記載100萬條刪除命令,而語句模式(ststement)只需記錄一條delete * from test。
企業場景如何選擇binlog的模式
1、如果生產中使用MySQL的特殊功能相對較少(儲存過程,觸發器,函數),選擇默認的語句模式即Statement Level。
2、如果生產中使用MySQL的特殊功能比較多的,可以選用Mixed模式。
3、如果生產中使用MySQL的特殊功能較多,有些昂數據最大化一致,此時最好Row level模式,但要注意該模式的日志量將非常大。
查看binlog模式
mysql> show global variables like "%binlog_format%"配置binlog日志模式
# vim my.cnf #在[mysql]模塊中配置 log-bin = /data/3306/mysql-bin binlog_format="STATEMENT" #binlog_format="ROW" #binlog_format="MIXED" 也可以修改環境變量來修改binlog的模式 mysql> SET global binlog_format='STATEMENT'總結
以上是生活随笔為你收集整理的MySQL二进制日志的三种模式解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LVS的NAT工作模型详解
- 下一篇: MySQL的sql语句分类汇总