mysqlbinlog 工具分析binlog日志


MySQL的binlog 日志對於生產環境非常有用,任何時間對數據庫的修改都會記錄在binglog中;當數據發生增刪改,創建數據庫對象都會記錄到binlog中,數據庫的復制也是基於binlog進行同步數據;

和SQL SERVER 數據庫開啟完整模式的原理一樣,每一次的數據的變動都會記錄在案;(對數據庫的select,show這些操作不會記錄在binlog)

下面介紹mysqlbinlog工具查看 二進制日志內容;

檢查工作:

1,查看是否開啟binlog

show variables like 'log_bin';

image

ON 代表開啟;OFF 代表沒有開啟;

如果沒開啟檢查my.cnf文件,我的binlog位置如下:

image

log_bin = /mysql/log//mysql-bin

2,查看binlog

show binary logs

image

可見,binlog已經開啟了;

 

示例:

01- 創建數據庫db;

create database db default character set utf8mb4;

02- 創建表t1

use db;
create table `t1` (
  `id` int(11) default null,
  `name` varchar(20) default null
) engine=innodb default charset=utf8mb4;

03- 插入數據

insert into t1(id,name) select 101,'tome101';
insert into t1(id,name) select 102,'tome102';
insert into t1(id,name) select 103,'tome103';
insert into t1(id,name) select 104,'tome104';
insert into t1(id,name) select 105,'tome105';
insert into t1(id,name) select 106,'tome106';
insert into t1(id,name) select 107,'tome107';
insert into t1(id,name) select 108,'tome108';

04- 更新數據

update t1 set name='jack101' where id=101;
update t1 set name='jack103' where id=103;
update t1 set name='jack105' where id=105;

05- 刪除數據

delete from t1 where id=102;
delete from t1 where id=104;
delete from t1 where id=106;

 

 

查看當前mysqlbinlog位置

which mysqlbinlog

image

我是二進制自定義安裝的mysql 路徑不是默認位置;

完整路徑為/mysql/app/mariadb/bin/mysqlbinlog

找到binlog位置,我的binlog位置如下:

image

把最后一個 binlog : 拷貝到 /tmp 目錄下:

image

查看binlog 日志內容:

/mysql/app/mariadb/bin/mysqlbinlog --no-defaults --database=db  --start-datetime='2019-04-11 00:00:00' --stop-datetime='2019-04-11 15:00:00'  mysql-bin.000007 | more

image

發現BINLOG 處的內容我們看不明白。。。^_^

增加 --base64-output=decode-rows –v 選項解析

base64-output,可以控制輸出語句輸出base64編碼的BINLOG語句;decode-rows:選項將把基於行的事件解碼成一個SQL語句

/mysql/app/mariadb/bin/mysqlbinlog --no-defaults --database=db  --base64-output=decode-rows -v --start-datetime='2019-04-11 00:00:00' --stop-datetime='2019-04-11 15:00:00'  mysql-bin.000007 | more

image

變成人類可以讀懂的SQL語句了;

PS: 可以把binlog解析后的內容放到一個文件后,在分析,利用如下腳本

/mysql/app/mariadb/bin/mysqlbinlog --no-defaults --database=db  --base64-output=decode-rows -v --start-datetime='2019-04-11 00:00:00' --stop-datetime='2019-04-11 15:00:00'  mysql-bin.000007 >/tmp/binlog007.sql

也可以根據精確位置 -- start-position   --stop-position 進行解析;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM