Mysqlbinlog解析工具

  Mysql的binlog日誌做用是用來記錄mysql內部增刪改查等對mysql數據庫有更新的內容的記錄(對數據庫的改動),對數據庫的查詢select或show等不會被binlog日誌記錄;主要用於數據庫的主從複製以及增量恢復。mysql

mysql的binlog日誌必須打開log-bin功能才能生存binlog日誌sql

-rw-rw---- 1 mysql mysql   669 8月  10 21:29 mysql-bin.000001數據庫

-rw-rw---- 1 mysql mysql   126 8月  10 22:06 mysql-bin.000002vim

-rw-rw---- 1 mysql mysql 11799 8月  15 18:17 mysql-bin.000003socket

一、打開MySQL的log-bin功能函數

編輯my.cnf配置文件工具


# grep log-bin my.cnf日誌

log-bin = /data/3306/mysql-bincode

查看是否啓用了日誌orm

1

mysql>show variables like 'log_bin';

二、Mysqlbinlog解析工具

  Mysqlbinlog功能是將Mysql的binlog日誌轉換成Mysql語句,默認狀況下binlog日誌是二進制文件,沒法直接查看。

  Mysqlbinlog參數

參數

描述

-d

指定庫的binlog

-r

至關於重定向到指定文件

--start-position--stop-position

按照指定位置精確解析binlog日誌(精確),如不接--stop-positiion則一直到binlog日誌結尾

--start-datetime--stop-datetime

按照指定時間解析binlog日誌(模糊,不許確),如不接--stop-datetime則一直到binlog日誌結尾

備註:myslqlbinlog分庫導出binlog,如使用-d參數,更新數據時必須使用use database。

例:解析ceshi數據庫的binlog日誌並寫入my.sql文件


#mysqlbinlog -d ceshi mysql-bin.000003 -r my.sql

使用位置精確解析binlog日誌


#mysqlbinlog mysql-bin.000003 --start-position=100  --stop-position=200 -r my.sql

三、MySQL binlog的三種工做模式

  (1)Row level

  日誌中會記錄每一行數據被修改的狀況,而後在slave端對相同的數據進行修改。

  優勢:能清楚的記錄每一行數據修改的細節

  缺點:數據量太大

  (2)Statement level(默認)

  每一條被修改數據的sql都會記錄到master的bin-log中,slave在複製的時候sql進程會解析成和原來master端執行過的相同的sql再次執行

  優勢:解決了 Row level下的缺點,不須要記錄每一行的數據變化,減小bin-log日誌量,節約磁盤IO,提升新能

  缺點:容易出現主從複製不一致

  (3)Mixed(混合模式)

  結合了Row level和Statement level的優勢

四、MySQL企業binlog模式的選擇

  1. 互聯網公司使用MySQL的功能較少(不用存儲過程、觸發器、函數),選擇默認的Statement level
  2. 用到MySQL的特殊功能(存儲過程、觸發器、函數)則選擇Mixed模式
  3. 用到MySQL的特殊功能(存儲過程、觸發器、函數),又但願數據最大化一直則選擇Row模式

五、設置MySQL binlog模式

  查看MySQLbinlog模式

mysql>show global variables like "binlog%";

+-----------------------------------------+-----------+

| Variable_name                           | Value     |

+-----------------------------------------+-----------+

| binlog_cache_size                       | 1048576   |

| binlog_direct_non_transactional_updates | OFF       |

| binlog_format                           | STATEMENT |       #系統默認爲STATEMENT模式

| binlog_stmt_cache_size                  | 32768     |

+-----------------------------------------+-----------+

4 rows in set (0.00 sec) 

MySQL中設置binlog模式


mysql>set global binlog_format='ROW';  

配置文件中設置binlog模式


#vim my.cnf

[mysqld]

binlog_format='ROW' #放在mysqld模塊下面

user    = mysql

port    = 3306

socket  = /data/3306/mysql.sock

六、配置完成後須要重啓mysql服務

Row模式下解析binlog日誌


#mysqlbinlog --base64-output="decode-rows" -v mysql-bin.000001

相關文章
相關標籤/搜索