mysql中binlog 参数设置 启用binlog 清理binlog mysqlbinlog使用 mysqldump + mysqlbinlog用于数据备份和恢复 代码实现处理binlog

2023-10-28

一.二进制日志格式(Binary Logging Formats)

1.1 binlog介绍

MySQL binlog 不仅仅记录了数据库发生更改的event,例如表创建或者变更表数据的操作;还记录了sql语句执行花费时间;其中2个核心目的在于便于目标数据库复制mysql数据库数据进行数据恢复
MySQL binlog不记录SELECT或 SHOW语句 ,要记录所有语句,使用The General Query Log;因为只记录完整的事务,所以binlog属于事务安全型,crash-safe
binlog包含两类文件:二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句)语句事件。
注意:启用MySQL binlog会使稍微降低性能,但是从进行复制、恢复操作上看 利大于弊

1.2 启用binlog

在这里插入图片描述
在这里插入图片描述
修改配置文件 my.cnf,添加配置

server_id=6
log-bin=mysql-bin
log-bin-index=mysql-bin.index

注意:
(1)在这里插入图片描述
binlog配置说明书指明在my.cnf配置文件中,只设置了全局系统变量log_bin,没有设置全局系统变量server_id的话,MySQL启动不了,server-id 必须唯一;

(2)
log-bin 是指生成的 Binlog 文件的前缀,文件添加数字后缀按顺序创建,如上,那么文件就将会是mysql-bin.000001、mysql-bin.000002 等。二进制日志文件的默认所在目录是数据目录
log-bin-index 则指 binlog index 文件的名称,可以不配置。

重启mysql服务
在这里插入图片描述
在这里插入图片描述

1.3 binlog几十种配置说明

binlog配置说明书指明

启动选项:
1.在这里插入图片描述
2.在这里插入图片描述
3.在这里插入图片描述

4.在这里插入图片描述
指定binlog日志记录的db(注意Statement-based logging以及Row-based logging的不同)
5.在这里插入图片描述
6.在这里插入图片描述
为事件生成校验和

测试选项,不适用于正常操作:
在这里插入图片描述
在这里插入图片描述
系统变量:

1.在这里插入图片描述
设置缓存大小,经常使用大型事务,则增加此缓存大小获得更好的性能

2.在这里插入图片描述

3.在这里插入图片描述
4.在这里插入图片描述
5.在这里插入图片描述
在这里插入图片描述
6.在这里插入图片描述
待续

1.4 清理binlog日志

(1)清理所有的binlog日志

RESET reset_option [, reset_option] ...

reset_option: {
    MASTER
  | QUERY CACHE
  | SLAVE
}

RESET Statement

(2)
删除指定日志文件名或日期之前的日志索引文件中列出的所有二进制日志文件

PURGE { BINARY | MASTER } LOGS {
    TO 'log_name'
  | BEFORE datetime_expr
}

PURGE BINARY LOGS Statement

1.5 sql命令查看配置

(1)查看binlog位置信息

mysql> show variables like '%log_bin%';
+---------------------------------+--------------------------------+
| Variable_name                   | Value                          |
+---------------------------------+--------------------------------+
| log_bin                         | ON                             |
| log_bin_basename                | /var/lib/mysql/mysql-bin       |
| log_bin_index                   | /var/lib/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF                            |
| log_bin_use_v1_row_events       | OFF                            |
| sql_log_bin                     | ON                             |
+---------------------------------+--------------------------------+

在这里插入图片描述

(2)查看binlog文件列表

mysql>  show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       177 |
| mysql-bin.000002 |       177 |
| mysql-bin.000003 |       177 |
| mysql-bin.000004 |       154 |
+------------------+-----------+

(3)查看日志状态

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

(4)刷新日志

mysql> flush logs;
Query OK, 0 rows affected (0.00 sec)

mysql>  show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       177 |
| mysql-bin.000002 |       177 |
| mysql-bin.000003 |       177 |
| mysql-bin.000004 |       201 |
| mysql-bin.000005 |       154 |
+------------------+-----------+
5 rows in set (0.00 sec)

自此刻开始产生一个新编号的binlog日志文件

每当mysqld服务重启时,会自动执行此命令,刷新binlog日志;在mysqldump备份数据时加 -F 选项也会刷新binlog日志;
(5)show binlog events查看binlog日志

mysql> show binlog events in 'mysql-bin.000002';
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| mysql-bin.000002 |   4 | Format_desc    |         6 |         123 | Server ver: 5.7.26-log, Binlog ver: 4 |
| mysql-bin.000002 | 123 | Previous_gtids |         6 |         154 |                                       |
| mysql-bin.000002 | 154 | Anonymous_Gtid |         6 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| mysql-bin.000002 | 219 | Query          |         6 |         289 | BEGIN                                 |
| mysql-bin.000002 | 289 | Table_map      |         6 |         337 | table_id: 219 (di.user)               |
| mysql-bin.000002 | 337 | Write_rows     |         6 |         380 | table_id: 219 flags: STMT_END_F       |
| mysql-bin.000002 | 380 | Table_map      |         6 |         428 | table_id: 219 (di.user)               |
| mysql-bin.000002 | 428 | Write_rows     |         6 |         473 | table_id: 219 flags: STMT_END_F       |
| mysql-bin.000002 | 473 | Table_map      |         6 |         521 | table_id: 219 (di.user)               |
| mysql-bin.000002 | 521 | Write_rows     |         6 |         567 | table_id: 219 flags: STMT_END_F       |
| mysql-bin.000002 | 567 | Xid            |         6 |         598 | COMMIT /* xid=361 */                  |
| mysql-bin.000002 | 598 | Rotate         |         6 |         645 | mysql-bin.000003;pos=4                |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
12 rows in set (0.00 sec)

(6)清空日志

mysql>  reset master;
Query OK, 0 rows affected (0.00 sec)

mysql>  show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       154 |
+------------------+-----------+
1 row in set (0.01 sec)

二. mysqlbinlog使用

2.1 查看binlog文件

在这里插入图片描述
mysqlbinlog是mysql官方提供的一个binlog查看工具,其配置参数mysqlbinlog — Utility for Processing Binary Log Files
基础语法:

mysqlbinlog [options] log_file ...

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

在这里插入图片描述

[root@di bin]# mysqlbinlog /var/lib/mysql/mysql-bin.000004
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#211201 14:44:26 server id 6  end_log_pos 123 CRC32 0xf66d4142 	Start: binlog v 4, server v 5.7.26-log created 211201 14:44:26
# Warning: this binlog is either in use or was not closed properly.
BINLOG '
yhmnYQ8GAAAAdwAAAHsAAAABAAQANS43LjI2LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AUJBbfY=
'/*!*/;
# at 123
#211201 14:44:26 server id 6  end_log_pos 154 CRC32 0xa4b6ecf8 	Previous-GTIDs
# [empty]
# at 154
#211201 14:45:03 server id 6  end_log_pos 219 CRC32 0x626744dd 	Anonymous_GTID	last_committed=0	sequence_number=1	rbr_only=no
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 219
#211201 14:45:03 server id 6  end_log_pos 441 CRC32 0x993ad376 	Query	thread_id=11	exec_time=0	error_code=0
use `di`/*!*/;
SET TIMESTAMP=1638341103/*!*/;
SET @@session.pseudo_thread_id=11/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1436549152/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=8/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
/* ApplicationName=IntelliJ IDEA 2019.1.4 */ CREATE TABLE t
(
    id   INT NOT NULL,
    name VARCHAR(20) NOT NULL,
    date DATE NULL
) ENGINE = InnoDB
/*!*/;
# at 441
#211201 14:45:03 server id 6  end_log_pos 506 CRC32 0x6c88337c 	Anonymous_GTID	last_committed=1	sequence_number=2	rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 506
#211201 14:45:03 server id 6  end_log_pos 576 CRC32 0x3bfddcda 	Query	thread_id=11	exec_time=0	error_code=0
SET TIMESTAMP=1638341103/*!*/;
BEGIN
/*!*/;
# at 576
#211201 14:45:03 server id 6  end_log_pos 622 CRC32 0x6748964e 	Table_map: `di`.`t` mapped to number 220
# at 622
#211201 14:45:03 server id 6  end_log_pos 668 CRC32 0x431da35c 	Write_rows: table id 220 flags: STMT_END_F

BINLOG '
7xmnYRMGAAAALgAAAG4CAAAAANwAAAAAAAEAAmRpAAF0AAMDDwoCFAAETpZIZw==
7xmnYR4GAAAALgAAAJwCAAAAANwAAAAAAAEAAgAD//wBAAAABWFwcGxlXKMdQw==
'/*!*/;
# at 668
#211201 14:45:03 server id 6  end_log_pos 714 CRC32 0x0ba4957a 	Table_map: `di`.`t` mapped to number 220
# at 714
#211201 14:45:03 server id 6  end_log_pos 774 CRC32 0x6d707394 	Update_rows: table id 220 flags: STMT_END_F

BINLOG '
7xmnYRMGAAAALgAAAMoCAAAAANwAAAAAAAEAAmRpAAF0AAMDDwoCFAAEepWkCw==
7xmnYR8GAAAAPAAAAAYDAAAAANwAAAAAAAEAAgAD///8AQAAAAVhcHBsZfgBAAAABHBlYXIhsg+U
c3Bt
'/*!*/;
# at 774
#211201 14:45:03 server id 6  end_log_pos 820 CRC32 0xfe57af6b 	Table_map: `di`.`t` mapped to number 220
# at 820
#211201 14:45:03 server id 6  end_log_pos 868 CRC32 0x498fb5bd 	Delete_rows: table id 220 flags: STMT_END_F

BINLOG '
7xmnYRMGAAAALgAAADQDAAAAANwAAAAAAAEAAmRpAAF0AAMDDwoCFAAEa69X/g==
7xmnYSAGAAAAMAAAAGQDAAAAANwAAAAAAAEAAgAD//gBAAAABHBlYXIhsg+9tY9J
'/*!*/;
# at 868
#211201 14:45:03 server id 6  end_log_pos 899 CRC32 0xb798db89 	Xid = 505
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

2.2 mysqldump + mysqlbinlog用于数据备份和恢复

Using mysqlbinlog to Back Up Binary Log Files

三. binlog的3种格式

在这里插入图片描述
注意:row-based logging使用主键确保有效识别行

查询数据库使用的格式

mysql>  show variables like'%binlog_format%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.01 sec)

修改binlog格式

mysql> SET GLOBAL binlog_format = 'STATEMENT';
mysql> SET GLOBAL binlog_format = 'ROW';
mysql> SET GLOBAL binlog_format = 'MIXED';

四. 代码实现对binlog的处理(仅提供思路)

引入maven依赖

<dependency>
            <groupId>com.github.shyiko</groupId>
            <artifactId>mysql-binlog-connector-java</artifactId>
            <version>0.13.0</version>
        </dependency>

核心代码

(1)创建客户端
在这里插入图片描述

(2)实现接口EventListener,重写onEvent(Event event) 方法
在这里插入图片描述

(3)注册监听对象
在这里插入图片描述

(3)连接
在这里插入图片描述

注意在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql中binlog 参数设置 启用binlog 清理binlog mysqlbinlog使用 mysqldump + mysqlbinlog用于数据备份和恢复 代码实现处理binlog 的相关文章

随机推荐

  • 解决HuggingFace加载预训练模型时报错TypeError: expected str, bytes or os.PathLike object, not NoneType

    完整报错 TypeError expected str bytes or os PathLike object not NoneType 解决方法 检查下载的组件 步骤1 完整的下载组件 包括bin文件的模型 配置文件和其他文件 尤其是to
  • 数据库系统原理练习题(十三)

    1 在数据库设计中 用E R图来描述信息结构但不涉及信息在计算机中的表示 它是数据库设计的 阶段 A 需求分析 B 概念设计 C 逻辑设计 D 物理设计 将E R模型转换成关系模型 属于数据库的 A 需求分析 B 概念设计 C 逻辑设计 D
  • AB实验的高端玩法系列4- 实验渗透低?用户未被触达?CACE/LATE

    CACE全称Compiler Average Casual Effect或者Local Average Treatment Effect 在观测数据中的应用需要和Instrument Variable结合来看 这里我们只讨论CACE的框架给
  • Java泛型的协变和逆变

    1 什么是泛型擦除 Java的泛型本质上不是真正的泛型 而是利用了类型擦除 type erasure 2 协变 covariant 和逆变 contravariant 2 1协变 covariant
  • Linux逻辑卷管理LVM

    前言 目前我们用的物理磁盘有内存限制 当我们把磁盘占满了 如果将文件放在其他磁盘对于以后的维护很是麻烦 单靠物理磁盘是无法解决空间增长的问题的这个时候逻辑卷就起到了很重要的作用 这篇文章的学习目标是 了解逻辑卷的优势特点 学会如何创建逻辑卷
  • 二维数组与稀疏数组之间的转换

    JAVA实现二维数组与稀疏数组之间的转换 一 什么是稀疏数组 稀疏数组 Sparse array 所谓稀疏数组就是数组中大部分的内容值都未被使用 或都为零 在数组中仅有少部分的空间使用 因此造成内存空间的浪费 为了节省内存空间 并且不影响数
  • JAVA循环结构

    1 循环结构特点 1 循环操作 2 循环条件 2 循环的四个步骤 1 初始化循环条件 2 循环条件 3 循环体 4 变更循环条件 3 while循环 while 循环条件 循环体 3 do while do 循环体 while 循环条件 分
  • Java上传图片文件

    PostMapping certificate public AjaxResult upCertificate MultipartFile file HttpServletRequest request AjaxResult ajax Aj
  • 素数之 积

    RSA加密算法在网络安全世界中无处不在 它利用了极大整数因数分解的难度 数据越大 安全系数越高 给定一个32位整数 请对其进行因数分解 找出是哪两个素数的乘积 思路 先判断是否为素数 再跟着条件走即可 JScript代码 let line
  • TortoiseSVN客户端重新设置用户名和密码

    在第一次使用TortoiseSVN从服务器CheckOut的时候 会要求输入用户名和密码 这时输入框下面有个选项是保存认证信息 如果选了这个选项 那么以后就不用每次都输入一遍用户名密码了 不过 如果后来在服务器端修改了用户名密码 则再次检出
  • RabbitMQ的交换机(主题模式)学习笔记

    视频地址 之前我们学习了扇出模式和直接模式 但是他们呢只能完成广播和到指定的某一个routingkey 但是如果我们想要像类似于正则表达式那样完成匹配即可接收就不行了 那么就可以使用主题模式来完成这个需要 主题模式 与扇出和直接模式差不多
  • Win10怎么添加开机启动项?Win10添加开机自动运行软件三种方法

    Win10管理开机启动项的方法相信大家已经非常熟悉 msconfig命令各系统都通用 那么很多用户发觉Win10和Win7 XP等系统不同 没有启动文件夹 那么我们怎么添加开机启动项呢 如晨软件或程序没有开机启动设置的话 是的 在Win10
  • LIMA和QLoRA论文解读

    LIMA Less Is More for Alignment paper https arxiv org abs 2305 11206 Meta在2023年5月发布了论文 LIMA Less Is More for Alignment 基
  • 容器化部署(prometheus+grafana)监控k8s集群

    prometheus images 下所有镜像导入到私有仓库 192 168 92 160 拷贝所有镜像到 master 的 images 目录下 root master images for i in gz do docker load
  • undefined reference to `vtable for’”问题的原因及解决方法

    在使用qt开发新项目时候 添加新的类是非常频繁的操作 有时候 手快 尤其程序员非常迷恋快捷键 doge 会不小心跳过一些关键步骤 导致出现一些问题 例如 undefined reference to vtable for 错误就很常见 QT
  • 获取百度搜索的返回结果

    基于request获取百度返回结果 本文基于request进行访问有可能导致SSLError 这有可能是由于本文是访问https所导致的 但这篇博客较完整地介绍了对html使用etree json对返回结果进行解析的操作 可以借鉴 Pyth
  • [Android studio] 第17节 Adapter适配器

    目录 一 Adapter是什么 二 Adapter详解 一 Adapter是什么 在 Android 开发中 适配器 Adapter 是一个关键的组件 用于将数据源绑定到界面上的视图组件 例如 ListView RecyclerView S
  • (转)自旋锁(spinlock) 解释得经典,透彻

    自旋锁与互斥锁有点类似 只是自旋锁不会引起调用者睡眠 如果自旋锁已经被别的执行单元保持 调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁 自旋 一词就是因此而得名 由于自旋锁使用者一般保持锁时间非常短 因此选择自旋而不是睡眠是非常必
  • docker容器启动报错

    启动容器报错 standard init linux go 178 exec user process caused no such file or directory 报错背景 我需要启动一个golang项目的容器 然后在我的centos
  • mysql中binlog 参数设置 启用binlog 清理binlog mysqlbinlog使用 mysqldump + mysqlbinlog用于数据备份和恢复 代码实现处理binlog

    文章目录 一 二进制日志格式 Binary Logging Formats 1 1 binlog介绍 1 2 启用binlog 1 3 binlog几十种配置说明 1 4 清理binlog日志 1 5 sql命令查看配置 二 mysqlbi