• 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 进行解析;

  • 相关阅读:
    .NET/C#程序开发中如何更优美地实现失败任务重试的逻辑?
    ava.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
    mysql安装到这里不能下去了,怎么解决
    win10安装jdk8点击下一步没反应,点击下一步闪退,win10安装jdk8失败
    运行打包的jar,jar中没有主清单属性
    idea如何打包项目(java)
    关于idea(eclipse同样适用,都是一样的步骤)无法导入Javafx包的问题及解决方案:
    Intellij idea 报错:Error : java 不支持发行版本5
    Class.getResource("xxx.css")得到值为null
    jdk11安装没有jre文件夹
  • 原文地址:https://www.cnblogs.com/651434092qq/p/15512308.html
Copyright © 2020-2023  润新知