MySQL的binlog日志的简介与查看

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL的binlog日志的简介与查看

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
mixed statement和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 命令来实现。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6天前
|
SQL 存储 关系型数据库
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
老架构师尼恩在其读者交流群中分享了关于 MySQL 中 redo log、undo log 和 binlog 的面试题及其答案。这些问题涵盖了事务的 ACID 特性、日志的一致性问题、SQL 语句的执行流程等。尼恩详细解释了这些日志的作用、所在架构层级、日志形式、缓存机制以及写文件方式等内容。他还提供了多个面试题的详细解答,帮助读者系统化地掌握这些知识点,提升面试表现。此外,尼恩还推荐了《尼恩Java面试宝典PDF》和其他技术圣经系列PDF,帮助读者进一步巩固知识,实现“offer自由”。
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
|
13天前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1576 12
|
14天前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
33 3
|
14天前
|
Oracle 关系型数据库 MySQL
Mysql(1)—简介及Windows环境下载安装
MySQL 是一个流行的关系型数据库管理系统(RDBMS),基于 SQL 进行操作。它由瑞典 MySQL AB 公司开发,后被 Sun Microsystems 收购,现为 Oracle 产品。MySQL 是最广泛使用的开源数据库之一,适用于 Web 应用程序、数据仓库和企业应用。
46 2
|
15天前
|
SQL 存储 关系型数据库
Mysql主从同步 清理二进制日志的技巧
Mysql主从同步 清理二进制日志的技巧
19 1
|
16天前
|
存储 SQL 关系型数据库
面试官:你能聊聊 binlog、undo log、redo log 吗?
本文详细解析了MySQL数据库中的三种日志:binlog、undo log和redo log。binlog用于记录数据库的所有表结构变更及数据修改,支持归档、主从复制和数据恢复;undo log用于事务回滚,确保事务的原子性和实现多版本控制;redo log则用于crash-safe,确保数据库异常重启后已提交记录不丢失。文章通过实例和图表,深入浅出地介绍了每种日志的特点、应用场景及其实现机制。适合数据库开发者和运维人员阅读。
47 2
|
17天前
|
关系型数据库 MySQL 数据库
DZ社区 mysql日志清理 Discuz! X3.5数据库可以做定期常规清理的表
很多站长在网站日常维护中忽略了比较重要的一个环节,就是对于数据库的清理工作,造成数据库使用量增加必须多的原因一般有2个:后台站点功能开启了家园,此功能现在很少有论坛会用到,但是灌水机会灌入大量垃圾信息致使站长长时间未能发觉;再有就是程序默认的一些通知类表单会存放大量的、对于网站日常运行并无意义的通知信息。
33 2
|
26天前
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
161 11
|
1月前
|
存储 关系型数据库 MySQL
binlog、redolog、undo log底层原理及ACID特性实现分享
在数据库管理系统中,日志机制是确保数据一致性、完整性和可靠性的关键组件。MySQL数据库中的binlog、redolog和undolog作为其核心日志系统,各自扮演着不同但同样重要的角色。本文将深入探讨这三种日志的底层原理以及它们如何分别实现ACID(原子性、一致性、隔离性、持久性)特性的不同方面。
46 0
|
12天前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
87 3