MySQL日誌之binlog
阿新 • • 發佈:2019-01-07
簡介
前兩篇文章提到了MySQL日誌的兩種形式,error_log和query_log,最近專案替換了binlog,這裡就簡單講一下bin_log的工作模式和用法。
binlog一般有三種模式:
- Statement Level模式:如果資料庫配置了主從,則所有會修改資料的SQL語句都會被記錄在master的binlog中。slave在複製的時候SQL程序會解析成和原來master端執行過的相同的SQL來再次執行。
這種模式不需要記錄每一行資料的變化,減少bin-log日誌量,節約IO,提高效能。因為他只需要記錄在Master上所執行的語句的細節,以及執行語句時候上下文的資訊。
Row Level模式:這種模式下日誌中會記錄每一行資料被修改的形式,然後在slave端再對相同的資料進行修改。
在這種模式下,binlog中可以不記錄執行的SQL語句的上下文相關資訊,僅僅只需要記錄哪一條記錄被修改了,修改成什麼樣了。所以row level的日誌內容會非常清楚地記錄下每一行資料修改的細節,非常易於理解。
- Mixed模式:實際上就是兩種模式的結合,MySQL會根據執行的每一條具體的SQL語句來區分對待記錄的日誌形式,也就是Statement和Row中選擇一種。
配置
方法一:在配置檔案中修改
首先,檢視當前是哪種模式
mysql> show variables like 'binlog_format'
-> ;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.01 sec)
可以看到,當前為ROW模式,比如我們想要修改為MIXED模式,在配置檔案中:
log-bin=mysql-bin
#binlog_format="STATEMENT"
#binlog_format="ROW"
binlog_format="MIXED"
方法二:執行時線上修改
mysql> SET SESSION binlog_format = 'STATEMENT'
-> ;
mysql> SET SESSION binlog_ format = 'ROW';
mysql> SET SESSION binlog_format = 'MIXED';
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'binlog_format';
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| binlog_format | MIXED |
+---------------+-----------+
1 row in set (0.00 sec)