mysqlbinlog 工具分析binlog日志

Wesley13
• 阅读 561

MySQL的binlog 日志对于生产环境非常有用,任何时间对数据库的修改都会记录在binglog中;当数据发生增删改,创建数据库对象都会记录到binlog中,数据库的复制也是基于binlog进行同步数据;

和SQL SERVER 数据库开启完整模式的原理一样,每一次的数据的变动都会记录在案;(对数据库的select,show这些操作不会记录在binlog)

下面介绍mysqlbinlog工具查看 二进制日志内容;

检查工作:

1,查看是否开启binlog

show variables like 'log_bin';

mysqlbinlog 工具分析binlog日志

ON 代表开启;OFF 代表没有开启;

如果没开启检查my.cnf文件,我的binlog位置如下:

mysqlbinlog 工具分析binlog日志

log_bin = /mysql/log//mysql-bin

2,查看binlog

show binary logs

mysqlbinlog 工具分析binlog日志

可见,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

mysqlbinlog 工具分析binlog日志

我是二进制自定义安装的mysql 路径不是默认位置;

完整路径为/mysql/app/mariadb/bin/mysqlbinlog

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

mysqlbinlog 工具分析binlog日志

把最后一个 binlog : 拷贝到 /tmp 目录下:

mysqlbinlog 工具分析binlog日志

查看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

mysqlbinlog 工具分析binlog日志

发现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

mysqlbinlog 工具分析binlog日志

变成人类可以读懂的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 进行解析;

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
Mysqlbinlog解析工具
  Mysql的binlog日志作用是用来记录mysql内部增删改查等对mysql数据库有更新的内容的记录(对数据库的改动),对数据库的查询select或show等不会被binlog日志记录;主要用于数据库的主从复制以及增量恢复。mysql的binlog日志必须打开logbin功能才能生存binlog日志\rwrw1mysqlmy
Wesley13 Wesley13
2年前
MySQL binlog2sql实现MySQL误操作的恢复
对于MySQL数据库中的误操作删除数据的恢复问题,可以使用基于MySQL中binlog做到类似于闪回或者生成反向操作的SQL语句来实现,是MySQL中一个非常实用的功能。原理不难理解,基于MySQL的row格式的binlog中,记录历史的增删改SQL信息,基于此解析出来对应的SQL语句(回滚的话就是反向的SQL语句)。在格式为binlog格式为r
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
2年前
Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
众所周知,binlog日志对于mysql数据库来说是十分重要的。在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份binlog日志恢复增量数据部分),化险为夷!一、简单了解binlogMySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句sel
Stella981 Stella981
2年前
Django之Django模板
1、问:html页面从数据库中读出DateTimeField字段时,显示的时间格式和数据库中存放的格式不一致,比如数据库字段内容为2012082616:00:00,但是页面显示的却是Aug.26,2012,4p.m.答:为了页面和数据库中显示一致,需要在页面格式化时间,需要添加<td{{dayrecord.p\_time|date:
Wesley13 Wesley13
2年前
MySQL主从复制异步原理以及搭建
MySQL主从复制的原理:  1、首先,MySQL主库在事务提交时会把数据变更作为时间events记录在二进制日志文件binlog中;MySQL主库上的sync\_binlog参数控制Binlog日志以什么样的方式刷新到磁盘上。  2、主库推送二进制日志文件Binlog中的事件到从库的中继日志RelayLog中,之后从库根据中继日志Rela
Wesley13 Wesley13
2年前
thinkphp 基本配置
12returnarray(34//定义数据库连接信息5'DB\_TYPE''mysql',//指定数据库是mysql67'DB\_HOST''localhost',89'DB\_NAME''uchome',//数据库名1011'DB\_USER''root
Wesley13 Wesley13
2年前
mysql 中 sync_binlog 参数作用
sync\_binlog”:这个参数是对于MySQL系统来说是至关重要的,他不仅影响到Binlog对MySQL所带来的性能损耗,而且还影响到MySQL中数据的完整性。对于“sync\_binlog”参数的各种设置的说明如下:sync\_binlog0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog\_cache中的信息到磁盘
京东云开发者 京东云开发者
7个月前
Vitess全局唯一ID生成的实现方案 | 京东云技术团队
为了标识一段数据,通常我们会为其指定一个唯一id,比如利用MySQL数据库中的自增主键。但是当数据量非常大时,仅靠数据库的自增主键是远远不够的,并且对于分布式数据库只依赖MySQL的自增id无法满足全局唯一的需求。因此,产生了多种解决方案,如UUID,Sn