1. 程式人生 > >MySQL日誌之binlog

MySQL日誌之binlog

簡介

前兩篇文章提到了MySQL日誌的兩種形式,error_logquery_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)

參考文章