mysql開啓和解析binlog日誌

binlog介紹

binlog是MySQL數據庫的二進制日誌,用於記錄用戶對數據庫操作的SQL語句(除了數據查詢語句)信息,可用於主從複製和數據恢復,可使用mysqlbin命令查看二進制日誌的內容。

binlog格式

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

1、STATMENT模式:基於SQL語句的複製(statement-based replication, SBR),每一條會修改數據的sql語句會記錄到binlog中。

優點:不需要記錄每一條SQL語句與每行的數據變化,這樣子binlog的日誌也會比較少,減少了磁盤IO,提高性能。

缺點:在某些情況下會導致master-slave中的數據不一致(如sleep()函數, last_insert_id(),以及user-defined functions(udf)等會出現問題)

2、基於行的複製(row-based replication, RBR):不記錄每一條SQL語句的上下文信息,僅需記錄哪條數據被修改了,修改成了什麼樣子了。

優點:不會出現某些特定情況下的存儲過程、或function、或trigger的調用和觸發無法被正確複製的問題。

缺點:會產生大量的日誌,尤其是alter table的時候會讓日誌暴漲。

3、混合模式複製(mixed-based replication, MBR):以上兩種模式的混合使用,一般的複製使用STATEMENT模式保存binlog,對於STATEMENT模式無法複製的操作使用ROW模式保存binlog,MySQL會根據執行的SQL語句選擇日誌保存方式。

binlog 常用參數

參數名 含義
log_bin = {on | off | base_name} 指定是否啓用記錄二進制日誌或者指定一個日誌路徑
sql_log_bin ={ on | off } 指定是否啓用記錄二進制日誌
expire_logs_days 指定自動刪除二進制日誌的時間,即日誌過期時間
log_bin_index 指定mysql-bin.index文件的路徑
binlog_format = { mixed | row | statement } 指定二進制日誌基於什麼模式記錄
max_binlog_size 指定二進制日誌文件最大值
binlog_cache_size 指定事務日誌緩存區大小
max_binlog_cache_size 指定二進制日誌緩存最大大小
sync_binlog = { 0 | n } 指定寫緩衝多少次,刷一次盤

開啓binlog

1)檢查狀態 

log_bin 爲 off 說明未開啓

show variables like 'log_%';

+----------------------------------------+--------------------------------------------+
| Variable_name                          | Value                                      |
+----------------------------------------+--------------------------------------------+
| log_bin                                      | OFF                                         |

2)配置binlog

修改my.ini配置文件

# 配置binlog文件路徑

log_bin = D:\Program Files\MySql_Bin\mysql-bin

# 配置模式

binlog_format = statement

# 配置文件大小

max_binlog_size = 100m

# 配置過期時間

expire_logs_days = 30

3)重新啓動服務

log_bin 爲 on 說明開啓

mysql> show variables like 'log_%';
+----------------------------------------+--------------------------------------------+
| Variable_name                          | Value                                      |
+----------------------------------------+--------------------------------------------+
| log_bin                                       | ON                                                                   |
| log_bin_basename                    | D:\Program Files\MySql_Bin\mysql-bin           |
| log_bin_index                            | D:\Program Files\MySql_Bin\mysql-bin.index  |

4)查看文件

 D:\Program Files\MySql_Bin 的目錄         ..
2020/02/03  16:12               120 mysql-bin.000001
2020/02/03  16:12                44 mysql-bin.index

5)查看內容

方式1

mysql> show binlog events in "mysql-bin.000001" ;

方式2

利用mysqlbinlog.exe命令

C:\Program Files\MySQL\MySQL Server 5.6\bin>mysqlbinlog.exe

查看命令參數

C:\Program Files\MySQL\MySQL Server 5.6\bin>mysqlbinlog.exe --help

查看所有內容日誌

C:\Program Files\MySQL\MySQL Server 5.6\bin>mysqlbinlog.exe  --database=sharding  E:\MySql_Bin\mysql-bin.000001

查看指定數據庫指定時間段的日誌

C:\Program Files\MySQL\MySQL Server 5.6\bin>mysqlbinlog.exe --start-datetime="2020-02-03 16:35:01" --stop-datetime="2020-02-03 16:39:01" --database=sharding E:\MySql_Bin\mysql-bin.000001

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章