MySQL的二進(jìn)制日志是主從復(fù)制的重要組成部分
開啟日志的變量為log_bin
在配置文件中添加下面配置
[mysqld]
log_bin =mysql-bin
配置的類型
statement
row
mixed
binlog_format = row|statement|mixed
statement模式
記錄使數(shù)據(jù)產(chǎn)生變化的SQL語句骂远,行數(shù)據(jù)修改和表格結(jié)構(gòu)的修改躺酒,觸發(fā)器的變化等等。
由于只記錄命令行和相關(guān)信息,所以日志量較小压固,但對于某些不確定的函數(shù)執(zhí)行時(shí)候,可能會產(chǎn)生主從不一致的情況诗轻,如CURRENTTIME()函數(shù)贮聂,UUID()函數(shù)
row模式
記錄每一條變化的數(shù)據(jù)變更記錄,然后在從機(jī)器上進(jìn)行重放忠烛,是最安全的模式属提,但是在修改大量語句時(shí)候可能會產(chǎn)生大量的日志,浪費(fèi)磁盤和網(wǎng)絡(luò)IO美尸,
在mysql5.6之后冤议,加入了參數(shù)binlog_row_image來緩解這個(gè)問題,默認(rèn)為FULL师坎。
mysql> show variables like "binlog_row_image";
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| binlog_row_image | FULL |
+------------------+-------+
1 row in set (0.00 sec)
FULL為默認(rèn)值, 意思是記錄一行紀(jì)錄里面的所有內(nèi)容, 無論該列是否被修改恕酸。
MINIMAL僅記錄被修改的列, 這樣就可以大大減少記錄量。
NOBLOB和FULL類型相似, 區(qū)別在于在TEXT和BLOB類型無更新時(shí)不會記錄胯陋。
mixed模式
存在不確定函數(shù)時(shí)候蕊温,使用statement袱箱,其他時(shí)候使用row模式記錄,雖然看似集合了兩種模式的優(yōu)點(diǎn)义矛,但是個(gè)人并不推薦使用发笔。