簡(jiǎn)介
前兩篇文章提到了MySQL日志的兩種形式,error_log和query_log酌心,最近項(xiàng)目替換了binlog荠察,這里就簡(jiǎn)單講一下bin_log的工作模式和用法。
binlog一般有三種模式:
-
Statement Level模式:如果數(shù)據(jù)庫配置了主從镣煮,則所有會(huì)修改數(shù)據(jù)的SQL語句都會(huì)被記錄在master的binlog中姐霍。slave在復(fù)制的時(shí)候SQL進(jìn)程會(huì)解析成和原來master端執(zhí)行過的相同的SQL來再次執(zhí)行。
這種模式不需要記錄每一行數(shù)據(jù)的變化典唇,減少bin-log日志量镊折,節(jié)約IO,提高性能介衔。因?yàn)樗恍枰涗浽贛aster上所執(zhí)行的語句的細(xì)節(jié)恨胚,以及執(zhí)行語句時(shí)候上下文的信息。
-
Row Level模式:這種模式下日志中會(huì)記錄每一行數(shù)據(jù)被修改的形式炎咖,然后在slave端再對(duì)相同的數(shù)據(jù)進(jìn)行修改赃泡。
在這種模式下寒波,binlog中可以不記錄執(zhí)行的SQL語句的上下文相關(guān)信息,僅僅只需要記錄哪一條記錄被修改了升熊,修改成什么樣了俄烁。所以row level的日志內(nèi)容會(huì)非常清楚地記錄下每一行數(shù)據(jù)修改的細(xì)節(jié),非常易于理解级野。
Mixed模式:實(shí)際上就是兩種模式的結(jié)合页屠,MySQL會(huì)根據(jù)執(zhí)行的每一條具體的SQL語句來區(qū)分對(duì)待記錄的日志形式,也就是Statement和Row中選擇一種蓖柔。
配置
方法一:在配置文件中修改
首先辰企,查看當(dāng)前是哪種模式
mysql> show variables like 'binlog_format'
-> ;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.01 sec)
可以看到,當(dāng)前為ROW模式况鸣,比如我們想要修改為MIXED模式牢贸,在配置文件中:
log-bin=mysql-bin
#binlog_format="STATEMENT"
#binlog_format="ROW"
binlog_format="MIXED"
方法二:運(yùn)行時(shí)在線修改
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)