mysql 二進制日志


 

1.日志類型

image

 

二進制日志記錄了所有對mysql數據庫的修改事件,包括增刪改事件和對表結構的修改事件。

 

2.配置使用二進制日志

在my.ini 配置

log-bin=mysql-bin

 

3.二進制日志格式

基於段的日志格式

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

 

image

 

基於行的日志格式

將my.ini 二進制格式修改為binlog_format=ROW

image

 

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;

4.復制方式:

1.基於SQL語句的復制(SBR)

優點:

生成日志量少,節約網絡傳輸的ID.

並不要求對主從數據庫的表定義完全相同。

相比於基於行的復制方式更為靈活。

缺點:

對於非確定事件,無法保證主從復制數據的一致性。

對於存儲過程,觸發器

2.基於行的復制(RBR)

優點:

可以應用於任何SQL的復制包括非確定性函數,存儲過程等。

可以減少數據庫鎖的使用。

缺點:

要求主從數據庫的表結構相同,否則就會中斷復制。

5.復制工作方式

image

1.主服務器將變更寫入二進制日志。

2.從讀取主的二進制日志變更並寫入到relay_log中。

基於日志點的復制,基於GTID的復制。

3.在從上重放relay_log中的日志。

基於SQL端的日志是在從庫上重新執行記錄的SQL。

基於行的日志則是在從庫上直接應用對數據行的修改。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM