檔案位置
配置檔案位置/etc/my.cnf或/etc/mysql/my.cnf
配置檔案内容
[mysqld]
# 辨別機器id,在binlog中會記錄此資訊,在slave機器中也回記錄對應的master主機server_id
server_id=1
# 主庫配置
# binlog名稱,表示開啟binlog
log-bin=mysql-bin
# binlog忽略的庫,可配置多個
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=information_schema
# binlog記錄的庫
binlog-do-db=mycattest
# binlog記錄的記錄類型 可選ROW/STATEMENT/MIXED
binlog-format=STATEMENT
#從庫配置
#啟用中繼日志,中繼日志名稱
relay-log=mysql-relay
查詢環境變量語句:show variables like '%relay%';
binlog-format參數說明
值 | 說明 | 優點 | 缺點 |
ROW | 從資料層面記錄變化 | 確定資料一緻性 | 記錄日志過多,且效率底例如批量更新會記錄所有更新後的資料 |
STATEMENT | 記錄修改的SQL | 節省空間,性能高 | 無法正确解析依賴上下文的環境變量,及資料庫函數,例如@ @hostname ,UUID()等 |
MIXED | 依據每條sql判斷使用哪種模式記錄日志 | 綜合了兩個模式優點盡量保證了資料一緻性 | 增加了複雜性 |
企業場景如何選擇binlog模式 1、網際網路公司,使用MySQL的功能相對少(存儲過程、觸發器、函數) 選擇預設的語句模式,Statement Level(預設) 2、公司如果用到使用MySQL的特殊功能(存儲過程、觸發器、函數) 則選擇Mixed模式 3、公司如果用到使用MySQL的特殊功能(存儲過程、觸發器、函數)又希望資料最大化一直,此時最好選擇Row level模式
Mixed切換為ROW模式記錄場景
- 當 DML 語句更新一個 NDB 表時;
- 當函數中包含 UUID() 時;
- 2 個及以上包含 AUTO_INCREMENT 字段的表被更新時;
- 執行 INSERT DELAYED 語句時;
- 用 UDF 時;
- 視圖中必須要求運用 row 時,例如建立視圖時使用了 UUID() 函數;
- 事物隔離級别較高時預設事物隔離級别為REPEATABLE-READ