MySQL的binlog日志的简介与查看

2023-09-15 20:12:20

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通
😁 2. 毕业设计专栏,毕业季咱们不慌忙,几百款毕业设计等你选。
❤️ 3. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当 。python爬虫入门进阶
❤️ 4. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 5. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门

1、binlog日志是什么

binlog主要用于记录MySQL中的数据库操作,它包括DDL和DML语句(除了查询语句)。它以事件的形式记录,它是一个二进制文件。MySQL的二进制日志是事务安全型的。一般来说开启二进制日志大概会有1%的性能损耗(参见MySQL官方中文手册 5.1.24版)。二进制有两个最重要的使用场景:

  1. MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves来达到master-slave数据一致性的目的。
  2. 数据恢复,通过使用 mysqlbinlog 工具来恢复数据。

binlog日志主要包括两类文件:二进制索引文件(文件名后缀为.index)用于记录所有二进制文件,二进制日志文件(文件名后缀为.0000*),记录数据库中所有的DDL和DML语句。

2、binlog日志如何查看

binlog有三种模式

format定义优点缺点
statement记录的是修改SQL语句日志文件小,节约IO,提高性能准确性差,对一些系统函数不能准确复制或不能复制,如now0.uuid0等
row记录的是每行实际数据变化准确性强,能准确复制数据的变更日志文件大,较大的网络10和磁盘lO
mixedstatement和row模式的混合准确性强,文件大小适中有可能发生主从不一致问题

业内目前推荐使用的是row模式,准确性高,虽然说文件大,但是现在有SSD和万兆光纤网络,这些磁盘IO和网络IO都是可以接受的。mysql默认的也是row模式。

binlog日志文件是二进制文件,不能直接查看。可以通过下面的命令进行查看

mysqlbinlog mysql-bin.00001

如果是row模式的话

mysqlbinlog -vv mysql-bin.00001

2.1. 查看binlog日志是否开启

在这里插入图片描述

mysql> show master status; #查看当前正在写入的binlog文件

如果没有开启的话则可以通过修改 my.ini (windows环境下)或者/etc/my.cnf 配置文件的 log-bin选项。

在配置文件中加入 log-bin 配置,表示启用binlog,如果没有给定值,写成 log-bin=,则默认名称为主机名。(注:名称若带有小数点,则只取第一个小数点前的部分作为名称)

[mysqld]
log-bin=my-binlog-name

2.2. 通过mysqlbinlog命令查看binlog日志

mysqlbinlog 是一个查看mysql二进制日志的工具,可以把mysql上面的所有操作记录从日志里导出,默认的安装路径是 :/usr/local/mysql/bin/mysqlbinlog

可以通过 find / -name "mysqlbinlog" 或者 which mysqlbinlog 命令来查找mysqlbinlog 工具的路径。

如果输入 mysqlbinlog 命令提示找不到命令的话,则可以通过建立软链的方式。比如我的mysqlbinlog命令在 /data/server/mysql/bin/mysqldump 路径下,可以通过如下命令建立软链解决此问题

ln -s /data/server/mysql/bin/mysqldump /usr/bin/mysqldump

如下是使用mysqlbinlog 命令的基本示例

# mysqlbinlog 的执行格式
mysqlbinlog [options] log_file ...
# 查看bin-log二进制文件(shell方式)
mysqlbinlog -v --base64-output=decode-rows /var/lib/mysql/master.000003

# 查看bin-log二进制文件(带查询条件)
mysqlbinlog -v --base64-output=decode-rows /var/lib/mysql/master.000003 \
    --start-datetime="2023-09-11 00:00:00"  \
    --stop-datetime="2023-09-12 00:00:00"   \
    --start-position="5000"    \
    --stop-position="20000"

这里设置了日志查询的开始时间(2023-09-11 00:00:00),结束时间(2023-09-12 00:00:00),开始位置(5000)以及结束位置(20000)。

更多的mysqlbinlog命令的操作参数可以通过 mysqlbinlog --help进行查看。

在这里插入图片描述
在这里插入图片描述

mysqlbinlog 日志的部分内容

#230910 15:38:30 server id 1  end_log_pos 328 CRC32 0x3bb60240 	Query	thread_id=63	exec_time=0	error_code=0
BEGIN
/*!*/;
# at 328
# at 575
#230910 15:38:30 server id 1  end_log_pos 658 CRC32 0x20b2fcd1 	Table_map: `db1`.`table1` mapped to number 197
# has_generated_invisible_primary_key=0
# at 658
#230910 15:38:30 server id 1  end_log_pos 771 CRC32 0xa0d5cf45 	Write_rows: table id 197 flags: STMT_END_F
### INSERT INTO `db1`.`table1`
### SET
###   @1=1
###   @2=2190000159000076193
###   @3=585
###   @4=3
###   @5=4
###   @6=2
###   @7=NULL
###   @8='2020-06-05 17:04:51'
###   @9='2023-09-10 15:38:30'
###   @10='1268831135392108546'
###   @11=0
# at 771
#230910 15:38:30 server id 1  end_log_pos 802 CRC32 0xecd87f75 	Xid = 90733
COMMIT/*!*/;

上面的输出包括信息

position: 位于文件中的位置,即第一行的(# at 230910),说明该事件记录从文件第230910 个字节开始
timestamp: 事件发生的时间戳,即第二行的(#190308 15:38:30)
server id: 服务器标识(1)
end_log_pos 表示下一个事件开始的位置(即当前事件的结束位置+1)
thread_id: 执行该事件的线程id (thread_id=63)
exec_time: 事件执行的花费时间
error_code: 错误码,0意味着没有发生错误
type:事件类型Query

增加 --base64-output=decode-rows –v 选项解析

(base64-output,可以控制输出语句输出base64编码的BINLOG语句;decode-rows:选项将把基于行的事件解码成一个SQL语句)

mysqlbinlog --no-defaults --database=db1 --base64-output=decode-rows -v  mysql-bin.000269>/data/server/binlog.sql

通过这个命令可以将mysql-bin.000269二进制文件的内容写到binlog.sql文件中。

删除binlog

删除binlog 可以通过 reset master 命令来实现。

更多推荐

【学习】一致性哈希与哈希环

一致性哈希一致性哈希(ConsistentHashing)是一种用于数据分布和负载均衡的算法,其核心思想是将数据和节点都映射到一个虚拟的哈希环上,并通过哈希值来确定数据应该分布到哪个节点上。以下是一致性哈希的基本实现步骤:1、确定哈希函数:首先,选择一个合适的哈希函数,它将数据映射到一个足够大的哈希空间,通常是一个整数

【C++】标准流与命名空间简介 ( Visual Studio 2019 中创建 C++ 项目 | iostream 标准流 | std 标准命名空间 | cout 控制台输出 )

文章目录一、VisualStudio2019中创建C++项目二、C++代码编写1、iostream标准流2、std标准命名空间3、cout控制台输出4、代码示例一、VisualStudio2019中创建C++项目打开VisualStudio2019,选择"菜单栏/文件/新建/项目"选项,创建新项目;选择Windows平

【C++】面向对象编程引入 ( 面向过程编程 | 查看 iostream 依赖 | 面向对象编程 )

文章目录一、面向过程编程二、查看iostream依赖三、面向对象编程一、面向过程编程给定圆的半径,求该圆的周长和面积;半径为rrr,周长就是2πr2\pir2πr,面积是πr2\pir^2πr2;使用面向过程的方法解决上述问题,只能是令程序顺序执行,如果要求多个圆的面积,则需要重复执行过程代码;代码示例://包含C++

手撕双链表

>作者简介:დ旧言~,目前大一,现在学习Java,c,c++,Python等>座右铭:松树千年终是朽,槿花一日自为荣。>望小伙伴们点赞👍收藏✨加关注哟💕💕🌟前言前面我们已经学习了顺序表和单链表,顺序表可以存储动态的数据,但是一旦元素过少,而又要开辟空间,这样就造成空间的浪费,而单链表以节点为单位存储,不支持随机

旅游出行类APP如何找到策略优势,最大化流量红利

刚刚结束了暑期出游,中秋国庆小长假马上到啦,出行计划又要安排起来了!多样化的出行方式为大家旅行带来极大的便利,同时,伴随互联网+模式的深化发展,各式各样的旅游出行类APP已经成长为旅行用户所依赖的一类工具。今天我们就来聊聊这类应用如何获利,如何开启商业化之路。旅游出行类APP现状疫情结束与政策扶持带动旅游业强势复苏随着

从金蝶云星空到赛意SMOM通过接口配置打通数据

从金蝶云星空到赛意SMOM通过接口配置打通数据数据源平台:金蝶云星空金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上,提供了标准的管理模式;通过标准的业务架构:多会计准则、多币别、多地点、多组织、多税制应用框架等,有效支持企业的运营管理;K/3Cloud提供了标准的业务建模:35种标准ERP领域模型、1046种

ELK日志分析系统

ELK概述是一套基于Elasticsearch(存储)、Logstash(过滤)、Kibana(前端展示)三个开源工具的日志收集、存储、检索和可视化的解决方案ELK可以帮助用户快速定位和分析应用程序的故障,监控应用程序的性能和安全性,以及提供丰富的数据分析和展示功能Elasticsearch(存储)是一个分布式搜索和分

springboot整合aop,实现日志操作

前言:整合之前,我们要明白aop是什么,为什么要用aop,aop能帮我们做什么。答:AOP是面向切面编程(Aspect-OrientedProgramming)的简称,它是一种编程思想,旨在在面向对象编程(OOP)的基础上进行功能模块的解耦和隔离。在传统的业务处理代码中,通常需要进行事务处理、日志记录等操作,这些操作会

redis深度历险 1 - Redis基础数据结构-001

Redis有5种基础数据结构,分别为:string(字符串)、list(列表)、set(集合)、hash(哈希)和zset(有序集合)。熟练掌握这5种基本数据结构的使用是Redis知识最基础也最重要的部分,它也是在Redis面试题中问到最多的内容。1字符串string字符串string是Redis最简单的数据结构。Re

AI在玩一种很新的艺术,700万网友在线围观,ControlNet又立功了

量子位|公众号QbitAIAI又在玩一种很新的艺术。一组“在离谱与合理的边缘反复试探”的图席卷各大平台,最火的一条𝕏已有近700万查看16.8万点赞,到处有人在求教程。除了棋盘样式,还有一种螺旋样式的也很流行。连知名投资机构YCombinator的创始人PaulGraham都来围观:这一刻,AI生成的艺术通过了我的图

Unity-Input System新输入系统插件学习

1.键盘、鼠标操作usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.InputSystem;usingUnityEngine.UI;publicclassNewInputSystem:Mon

热文推荐