MySQL的binlog 日志對於生產環境非常有用,任何時間對數據庫的修改都會記錄在binglog中;當數據發生增刪改,創建數據庫對象都會記錄到binlog中,數據庫的復制也是基於binlog進行同步數據;
和SQL SERVER 數據庫開啟完整模式的原理一樣,每一次的數據的變動都會記錄在案;(對數據庫的select,show這些操作不會記錄在binlog)
下面介紹mysqlbinlog工具查看 二進制日志內容;
檢查工作:
1,查看是否開啟binlog
show variables like 'log_bin';
ON 代表開啟;OFF 代表沒有開啟;
如果沒開啟檢查my.cnf文件,我的binlog位置如下:
log_bin = /mysql/log//mysql-bin
2,查看binlog
show binary logs
可見,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
我是二進制自定義安裝的mysql 路徑不是默認位置;
完整路徑為/mysql/app/mariadb/bin/mysqlbinlog
找到binlog位置,我的binlog位置如下:
把最后一個 binlog : 拷貝到 /tmp 目錄下:
查看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
發現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
變成人類可以讀懂的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 進行解析;