最近,一直在糾結要不要改資料庫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...