当前位置: 首页 > news >正文

Mysql,使用Mysqlbinlog,解析binlog日志

Mysql,使用Mysqlbinlog 解析 binlog日志
前言:很多时候,当我们的业务数据产生了不正常的变化,但却无法得知这类操作是在哪里进行,并且如何进行,单单从程序当面排查很费力。那么就需要通过分析数据库日志来得到历史执行 SQL,根据 SQL 执行逻辑来确认代码位置,进而确认是否是 BUG,亦或是误操作等。

一,binlog 简介
老规矩,官网地址:https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html

binlog 是 MySQL Server 层记录的二进制日志文件,用于记录MySQL的数据更新或者潜在更新(比如 DELETE 语句执行删除而实际并没有符合条件的数据),select 或 show 等不会修改数据的操作则不会记录在binlog中。通常在binlog_format = ROW的环境下,我们可以通过 binlog 获取历史的SQL执行记录,前提是必须开启 binlog_rows_query_log_events 参数(默认关闭,建议开启),该参数可以通过 rows_query_event 事件记录原始的 SQL,如果不开启的话,则只能获取 SQL 对应的行数据

在my.ini 文件里面配置如下:

[mysqld]
#选择 row 模式
binlog-format = ROW 
1
2
3
二,binlog解析
由于binlog 是二进制文件,所以无法直接使用文本打开,需要使用对应的解析工具才可以查看具体内容。

使用该 SHOW MASTER STATUS语句确定当前二进制日志文件的名称和位置:


使用该 show binlog events 语句可以解析指定 binlog 日志,但不适宜提取大量日志,速度很慢,不建议使用。


三, mysqlbinlog 解析binlog
mysqlbinlog 是 mysql 原生自带的 binlog 解析工具,速度快而且可以配合管道命令过滤数据,适合解析大量 binlog 文件,建议使用。

官网地址:https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog.html:

wondows目录下 位于 D:/mysql/bin/mysqlbinlog.exe


linux 目录下位于 /usr/sbin/mysqlbinlog


windows,Linux 统一解析命令:

mysqlbinlog --no-defaults --database=databaseName --base64-output=decode-rows -vv  --skip-gtids=true --start-datetime='2022-07-09 00:00:00' --stop-datetime='2022-07-11 00:00:00'  /data/mysql/mysql-bin.000003 > /opt/sql.log
1
--no-defaults:不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,可以使用 --no-defaults 来防止它们被读取

database:只列出该数据库下的行数据,但无法过滤 Rows_query_event。

base64-output=decode-rows -vv:显示具体 SQL 语句。

skip-gtids=true:忽略GTID 显示。

--start-datetime:时间范围 ,起始时间。

--stop-datetime:时间范围 ,结束时间。

/opt/sql.log:将结果导入到日志文件,方便查看。

命令结果


详细参数列表:上面官网地址

如果不确定 SQL 格式或是无法筛选到数据,可以使用 grep 多次过滤筛选,比如 grep -C 1 -i " test" |grep -C 1 -i "test1" |grep -C 1 -i "delete" 筛选对应表上的 delete 操作。

触发器执行的 SQL 不会记录在 Rows_query_event中,只会记录对应的行数据。

--database 是无法过滤 Rows_query_event 的,只可以过滤行数据。

linux 下通过管道命令过滤sql

mysqlbinlog /data/mysql_data/bin.000001  --database=databaseName  --base64-output=decode-rows -vv  --skip-gtids=true |grep  -C 1 -i "delete from  test" > /opt/sql.log
1
四,常见比较解析比较
对于常见的数据库(SQL Server、Oracle、MySQL)来说,都具有类似相同的日志来记录历史 SQL,不同的只是日志的记录方式和解析方法:

文章知识点与官方知识档案匹配,可进一步学习相关知识
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/Crazy_Cw/article/details/125701482


http://www.mrgr.cn/news/66669.html

相关文章:

  • 使用 Visual Studio Installer 彻底卸载 Visual Studio方法与下载
  • C# 独立线程
  • 基于Leaflet的自助标绘源码解析-其它对象解析
  • dns服务部署
  • 四款主流的3D创作和游戏开发软件的核心特点和关系
  • Go 语言循环语句
  • Docker学习—Docker的安装与使用
  • css 文字一行没有放满不进行换行
  • 【JAVA高级编程-JavaWeb】作业5
  • 【GESP】C++一级真题练习(202306)luogu-B3839,累计相加
  • 数据结构与算法——Java实现 54.力扣1008题——前序遍历构造二叉搜索树
  • 【Windows】让你的磁盘更健康!Windows `chkdsk`命令使用全指南
  • 【算法】【优选算法】滑动窗口(上)
  • java: 无法访问org.springframework.web.bind.annotation.RequestMapping
  • Centos Linux 7 搭建邮件服务器(postfix + dovecot)
  • 【JavaEE】认识进程
  • C#-MemoryMarshal
  • (十三)JavaWeb后端开发——MySQL2
  • 微控制器(MCU)如何运行存储在Flash的程序???
  • 基于python构造电影neo4j知识图谱
  • MongoDB基础介绍以及从0~1语法介绍
  • WEB:如何优化大数据菜单展示的攻略指南
  • 平衡的二叉搜索树 —— AVL树
  • 基于java+SpringBoot+Vue的旅游管理系统设计与实现
  • 小菜家教平台(二):基于SpringBoot+Vue打造一站式学习管理系统
  • 【JAVA】Java基础—基础语法:控制结构(条件语句、循环结构)