MySQL的binlog是一種二進(jìn)制日志文件,用于記錄數(shù)據(jù)庫中所有的修改操作,可以用于數(shù)據(jù)恢復(fù)、備份、復(fù)制等操作。MySQL binlog可以通過多種方式記錄,包括statement、row以及mixed三種方式。
1. statement方式
# 設(shè)置binlog_format為statement set global binlog_format='statement';
Statement方式是記錄SQL語句的方式,當(dāng)執(zhí)行某個SQL語句時,MySQL會將該語句記錄到binlog中。這種方式記錄操作更加簡潔明了,但是可能存在一些特定情況下的不兼容性問題,因為某些SQL語句在不同的MySQL版本中有不同的解析方式。
2. row方式
# 設(shè)置binlog_format為row set global binlog_format='row';
在Row方式下,MySQL記錄的是行級別的修改,而不是操作的SQL語句。以某個表的一條記錄為例,當(dāng)進(jìn)行了一次UPDATE操作時,MySQL會將修改前后的完整記錄都記錄到binlog中。這種方式通常能夠得到最精確的記錄,但是會增加binlog文件的大小。
3. mixed方式
# 設(shè)置binlog_format為mixed set global binlog_format='mixed';
Mixed方式是上述兩種方式的混合模式,MySQL會根據(jù)情況自動選擇使用Statement或Row方式。對于那些不能準(zhǔn)確記錄的操作,MySQL會使用Row模式,對于其他大部分操作,MySQL會使用Statement模式。