1.日誌類型 二進位日誌記錄了所有對mysql資料庫的修改事件,包括增刪改事件和對錶結構的修改事件。 2.配置使用二進位日誌 在my.ini 配置 log-bin=mysql-bin 2.二進位日誌格式 基於段的日誌格式 binlog_format=STATEMENT 記錄了操作的sql語句。 優點... ...
1.日誌類型
二進位日誌記錄了所有對mysql資料庫的修改事件,包括增刪改事件和對錶結構的修改事件。
2.配置使用二進位日誌
在my.ini 配置
log-bin=mysql-bin
2.二進位日誌格式
基於段的日誌格式
binlog_format=STATEMENT
記錄了操作的sql語句。
優點:
日誌記錄量相對較小,節約磁碟及網路I/O,只對以一條記錄修改或插入ROW格式所產生日量小於段產生的日誌量。
缺點:
必須記錄上下文信息,保證語句在從伺服器上的執行結果和在主伺服器上相同。
特定函數如UUID,USER()這樣非確定性的函數無法複製。
可能造成mysql複製的主備伺服器數據不一致,從而中斷複製鏈路。
顯示binlog 格式
show variables like 'binlog_format';
set session binlog_format=statement;
顯示二進位日誌
show binary logs;
//刷新日誌
flush logs;
在命令行下執行:
mysqlbinlog ../data/mysql-bin.000003
基於行的日誌格式
將my.ini 二進位格式修改為binlog_format=ROW
row 的優點
row格式可以避免MYSQL複製中出現主從不一致的問題,官方推薦這種格式。
同一個sql語句修改了10000條數據的情況下。基於段的日誌只會記錄這個SQL語句。基於行的日誌會有10000條記錄,分別記錄每一行數據的修改。
1.是mysql主從複製更加安全。
2.對每一行數據修改比基於段的複製高效。
如果誤操作修改了資料庫中的數據,同時沒有備份可以恢復時,我們就可以通過分析二進位日誌,對日誌中記錄的數據修改操作做反向處理的方式來達到恢複數據的目的。
缺點:
記錄日誌量較大
binlog_row_image=[full,minimal,noblob]
full : 記錄列的所有修改
minimal :只記錄修改的列。
noblob :如果是text類型或clob欄位,不記錄 這些日誌。
使用 mysqlbinlog -vv ../data/mysql-bin.000005 查看明細日誌。
set session binlog_row_image=minimal
混合日誌格式:
binlog_format=MIXED
特點:
根據sql語句由系統決定在記錄端和基於行的日誌格式中進行選擇。
數據量大小由所執行的SQL決定。
如何選擇二進位格式
建議
binlog_formart =mixed
or
binlog_format=row;
binlog_row_image=minimal;
複製方式:
1.基於SQL語句的複製(SBR)
優點:
生成日誌量少,節約網路傳輸的ID.
並不要求對主從資料庫的表定義完全相同。
相比於基於行的複製方式更為靈活。
缺點:
對於非確定事件,無法保證主從複製數據的一致性。
對於存儲過程,觸發器
2.基於行的複製(RBR)
優點:
可以應用於任何SQL的複製包括非確定性函數,存儲過程等。
可以減少資料庫鎖的使用。
缺點:
要求主從資料庫的表結構相同,否則就會中斷複製。