Mysql日志的三種格式

MySQL binlog格式

binlog的格式也有三種:STATEMENT、ROW、MIXED 。

1、STATMENT模式:

基于SQL語句的復(fù)制(statement-based replication, SBR),每一條會(huì)修改數(shù)據(jù)的sql語句會(huì)記錄到binlog中。

優(yōu)點(diǎn):

不需要記錄每一條SQL語句與每行的數(shù)據(jù)變化,這樣子binlog的日志也會(huì)比較少,減少了磁盤IO,提高性能。

缺點(diǎn):

在某些情況下會(huì)導(dǎo)致master-slave中的數(shù)據(jù)不一致(如sleep()函數(shù), last_insert_id(),以及user-defined functions(udf)等會(huì)出現(xiàn)問題)

2、基于行的復(fù)制(row-based replication, RBR):不記錄每一條SQL語句的上下文信息,僅需記錄哪條數(shù)據(jù)被修改了,修改成了什么樣子了。

優(yōu)點(diǎn):

不會(huì)出現(xiàn)某些特定情況下的存儲(chǔ)過程、或function、或trigger的調(diào)用和觸發(fā)無法被正確復(fù)制的問題。

缺點(diǎn):

會(huì)產(chǎn)生大量的日志,尤其是alter table的時(shí)候會(huì)讓日志暴漲。

3、混合模式復(fù)制(mixed-based replication, MBR):

以上兩種模式的混合使用,一般的復(fù)制使用STATEMENT模式保存binlog,對(duì)于STATEMENT模式無法復(fù)制的操作使用ROW模式保存binlog,MySQL會(huì)根據(jù)執(zhí)行的SQL語句選擇日志保存方式。

binlog配置

在MySQL配置文件my.cnf文件中的mysqld節(jié)中添加下面的配置文件:

[mysqld]

#設(shè)置日志格式

binlog_format = mixed

#設(shè)置日志路徑,注意路經(jīng)需要mysql用戶有權(quán)限寫

log-bin = /data/mysql/logs/mysql-bin.log

#設(shè)置binlog清理時(shí)間

expire_logs_days = 7

#binlog每個(gè)日志文件大小

max_binlog_size = 100m

#binlog緩存大小

binlog_cache_size = 4m

#最大binlog緩存大小

max_binlog_cache_size = 512m

重啟MySQL生效,如果不方便重啟服務(wù),也可以直接修改對(duì)應(yīng)的變量即可。

總結(jié)

無論是增量備份還是主從復(fù)制,都是需要開啟mysql-binlog日志,最好跟數(shù)據(jù)目錄設(shè)置到不同的磁盤分區(qū),可以降低io等待,提升性能;并且在磁盤故障的時(shí)候可以利用mysql-binlog恢復(fù)數(shù)據(jù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容