mysql三種binlog日誌的理解

2022-01-15 12:18:44 字數 1435 閱讀 3500

最近,一直在糾結要不要改資料庫binlog的日誌格式,原先用的是row格式,導致資料庫binlog日誌較大,磁碟空間本來也不是很大,所以就想看看能不能改變binlog日誌。在該binlog日誌之前,先查詢乙份關於binlog日誌的講解,記錄如下:

一,mysql binlog共有三種日誌  statement  row mixed  

mysql binlog日誌有三種格式,分別為statement,mixed和row.

1.statement:每一條會修改資料的sql都會記錄在binlog中。

優點:binlog檔案較小

日誌是包含使用者執行的原始sql,方便統計和審計

出現最早,相容較好

缺點:存在安全隱患,可能導致主從不一致

對一些系統函式不能準確複製或是不能複製

2.row不記錄sql語句上下文相關資訊,僅儲存哪條記錄被修改。

優點:相比statement更加安全的複製格式

在某些情況下複製速度更快(sql複雜,表有主鍵)

系統的特殊函式也可以複製

更少的鎖

更新和刪除語句檢查是否有主鍵,如果有則直接執行,如果沒有,看是否有二級索引,如再沒有,則全表掃瞄

缺點:binlog比較大(myql5.6支援binlog_row_image)

單語句更新(刪除)表的行數過多,會形成大量binlog

無法從binlog看見使用者執行sql(5.6中增加binlog_row_query_log_events記錄使用者的query)

3.mixed: 是以上兩種level的混合使用,一般的語句修改使用statment格式儲存binlog,如一些函式,statement無法完成主從複製的操作,則採用row格式儲存binlog,mysql會根據執行的每一條具體的sql語句來區分對待記錄的日誌形式,也就是在statement和row之間選擇一種.新版本的mysql中隊row level模式也被做了優化,並不是所有的修改都會以row level來記錄,像遇到表結構變更的時候就會以statement模式來記錄。至於update或者delete等修改資料的語句,還是會記錄所有行的變更。

優點:混合使用row和statement格式,對於ddl記錄statument,對於table裡的行操作記錄為row格式。

如果使用innodb表,事務級別使用了read_committed or read_umcommitted日誌級別只能使用row格式。

但是使用row格式中ddl語句還是會記錄成statement格式。

缺點:mixed模式中,那麼在以下幾種情況下自動將binlog模式由sbr模式改成rbr模式。

當dml語句更新乙個ndb表

當函式中包含uuid時

2個及以上auto_increment欄位的表被更新時

行任何insert delayed語句時

用udf時

檢視中必須要求使用rbr時,例如建立檢視使用了uuid()函式

**:

mysql獲取邏輯日誌 MySQL 三種日誌

日誌是 資料庫的重要組成部分,記錄著資料庫執行期間各種狀態資訊。日誌主要包括錯誤日誌 查詢日誌 慢查詢日誌 事務日誌 二進位制日誌幾大類。作為開發,我們重點需要關注的是二進位制日誌 和事務日誌 包括 和 本文接下來會詳細介紹這三種日誌。binlog 用於記錄資料庫執行的寫入性操作 不包括查詢 資訊,...

MySQL開啟binlog日誌

mysql開啟binlog日誌很簡單,只需要找到配置檔案,在配置檔案中的 mysqld 配置段新增下面一句話就可以了 log bin mysql bin 這樣就開啟了mysql的binlog日誌。使用下面的sql語句在mysql的客戶端可以檢視binlog日誌是否開啟 show master log...

mysql 匯出binlog日誌

首先你得開啟了mysql的bin log.找到你的mysqlbinlog。執行 find name mysqlbinlog 檢視mysql server上的二進位制日誌 mysql showbinarylogs 將binlog檔案匯出為sql檔案 usr local src mysql 5.7.10...