安全考虑,binlog_row_image建议尽量使用FULL

MySQL:开启binlog日志(参数binlog_format和binlog_row_image) binlog日志只保留七天。 阅读详情

背景

binlog_row_image这个参数是MySQL5.6新增的参数,默认值是FULL,在5.7版本默认值也是FULL,但今天我看到有客户的 MySQL5.7版本参数模板采用的是MINIMAL而不是FULL,我对这个修改表示疑惑。

一般来说,对一个参数默认值作出修改,我们都应该考虑清楚影响范围,所以我准备做一次测试,并得出结论哪个参数值才是最佳设置。

 

术语解释

前提:
binlog格式必须为row格式或者mixed格式,不可以是statement格式。
名称解释:
before image:前镜像,即数据库表中修改前的内容。
after image:后镜像,即数据库表中修改后的内容。

 

binlog_row_image三种设置及异同

binlog_row_image参数可以设置三个合法值: FULL、MINIMAL、NOBLOB
三个不同值的作用如下:
 

FULL: Log all columns in both the before image and the after image.
binlog日志记录所有前镜像和后镜像。

MINIMAL: Log only those columns in the before image that are required to identify the row to be changed; log only those columns in the after image where a value was specified by the SQL statement, or generated by auto-increment.
binlog日志的前镜像只记录唯一识别列(唯一索引列、主键列),后镜像只记录修改列。

noblob: Log all columns (same as full), except for BLOB and TEXT columns that are not required to identify rows, or that have not changed.
binlog记录所有的列,就像full格式一样。但对于BLOB或TEXT格式的列,如果他不是唯一识别列(唯一索引列、主键列),或者没有修改,那就不记录。

 

For the before image, it is necessary only that the minimum set of columns required to uniquely identify rows is logged. If the table containing the row has a primary key, then only the primary key column or columns are written to the binary log. Otherwise, if the table has a unique key all of whose columns are NOT NULL, then only the columns in the unique key need be logged. (If the table has neither a primary key nor a unique key without any NULL columns, then all columns must be used in the before image, and logged.) In the after image, it is necessary to log only the columns which have actually changed.

 

官方提到:如果没有唯一识别列(唯一索引列、主键列),例如只有普通key,那么MINIMAL格式的前镜像也会记录所有所有列,但后镜像依然只记录修改列。

 

分析

1. 这个参数如果设置成MINIMAL格式,可以节省不少磁盘空间,节省一定的io。但由于前镜像不记录修改列,只在后镜像记录修改列,如果数据出现误操作,必然不能通过flashback或binlog2SQL等快速闪回工具恢复数据,因为不能通过BinLog生成反向SQL了。


节省磁盘空间: 高
数据安全性: 低

 

2. 这个参数如果设置成NOBLOB格式,在表中TEXT和BLOB等大字段如果不修改,就不记录前后镜像了,其他小字段的列的修改依然记录前后镜像,一般大字段消耗的磁盘空间是非常大的,可以节省不少磁盘空间。而如果表没有大字段,NOBLOB和FULL格式并没有区别,如果数据出现误操作,可以通过flashback或BinLog2SQL等快速闪回工具恢复数据。
 

节省磁盘空间: 中
数据安全性: 中

 

3. 这个参数如果设置成FULL格式,这是MySQL5.6和MySQL5.7的默认设置,binlog记录所有数据的前后镜像,如果数据出现误操作,可以能通过flashback或binlog2sql等快速闪回工具恢复数据。在数据列比较大的情况下,在大量的update、delete操作时,binlog盘增长会很快,比较容易出现“binlog盘快满”的监控告警。


节省磁盘空间: 低
数据安全性: 高

 

测试过程如下:

1 测试binlog_row_image=MINIMAL

 

1.1 测试没有主键没有唯一索引

看是否前镜像全保留

 

日志如下:

 

binlog_row_image=MINIMAL,没有主键没有唯一索引,确实前镜像全保留,后镜像只有修改列

 

1.2 测试有主键

看是否前镜像只有主键列,后镜像只有修改列

 

日志如下:

 

确实前镜像只有主键列,后镜像只有修改列。就这个原因,导致不能闪回数据,安全性考虑不应该使用binlog_row_image=MINIMAL。

 

2 测试 binlog_row_image=noblob

 

2.1 测试没有主键没有唯一索引

由于没有主键没有唯一索引,所以前镜像是全保留,因为TEXT/blob是修改列,所以后镜像的TEXT/blob列也被保留了。整体和FULL格式一致。

 

日志如下:

 

2.2 测试有主键

有主键,修改列依然是TEXT/blob列,由于有主键了,所以前镜像不会强迫包含所有列,但前镜像的的TEXT列被忽略、不包含,后镜像的TEXT列由于是修改列,所以包含。

 

日志如下:

 

实验证明binlog_row_image=noblob这个格式,依然存在缺失前镜像的问题,导致某些场景无法闪回,所以也不推荐设置。

 

2.3 测试有主键,修改列也不是TEXT列

 

 

日志如下:

 

前镜像和后镜像包含除TEXT/BLOB列之外的所有列

 

结论

大多数客户生产的安全性大于一切,在硬盘白菜价的今天,不提倡设置binlog_row_image=MINIMAL参数,应该继续使用默认值binlog_row_image=FULL格式。

 

【Canal】Canal 支持哪些 Binlog 格式(Statement, Row, Mixed)?为什么必须使用 ROW 格式? 摘要 MySQL的Binlog格式对Canal等CDC工具至关重要。本文深入分析了三种Binlog格式: STATEMENT格式记录SQL语句本身,存在非确定性问题(如NOW(), UUID()等函数),会导致主从数据不一致,完全不适合Canal。 ROW格式记录行数据变更前后的完整镜像,提供绝对的数据一致性,是Canal唯一支持且必须使用的格式,确保精确捕获数据变化。 MIXED格式虽尝试智能切换,但其不可预测性和Canal无法处理混合流的特点,使其成为危险的折中方案。 Canal源码级分析表明,其核心解 阅读详情

相关推荐

ATM火控电容改造实战:提升速凌无刷电机动力与系统稳定性

在嵌入式系统与电机驱动领域,电源完整性是保障电路稳定运行的核心基础。其核心原理在于通过合理的电容网络设计,为负载提供瞬时大电流并滤除高频噪声,从而维持电压稳定。这项技术的核心价值在于能显著提升系统的动态响应能力与可靠性,避免因电压跌落导致微控制器复位或功率器件过应力。典型的应用场景包括无人机电调、机器人关节驱动以及各类需要快速响应的伺服系统。本文聚焦于水弹发射器ATM火控系统的硬件迭代,通过详解电容的选型、布局与焊接流程,特别是针对速凌五代无刷电机的高启动电流特性,系统性地阐述了如何通过强化电源储能与芯片去

weixin_33868027的博客 555

MySQL的binlog_row_image参数学习

详解MySQL的binlog重要参数:binlog_row_image

qq_39988221的博客 1202

三维重建之条纹投影结构光(三)——相位展开优化与多频外差实践

本文深入探讨了三维重建中条纹投影结构光技术的核心环节——相位展开优化。针对传统路径跟踪法存在的误差传播与路径依赖问题,重点解析了多频外差法的原理与优势,并通过详细的C++代码实践,展示了如何利用三频外差法实现鲁棒、高精度的相位展开,从而获得连续的绝对相位图,为后续三维点云生成奠定坚实基础。

weixin_29074295的博客 529

mysql的Binlog_row_image参数学习

Binlog_row_image参数简介 binlog_row_image这个参数是MySQL5.6新增的参数,默认值是FULL,在5.7版本默认值也是FULL。 参数使用前提:binlog格式必须为row格式或者mixed格式,不可以是statement格式。 名词解释: 前镜像:数据库表中修改前的内容 后镜像:数据库表中修改后的内容 binlog_row_image参数可以设置三个合法值: FULL、MINIMAL、NOBLOB。 不同参数设置的实验 binlog_row_image为F

weixin_41561862的博客 6073

【理解机器学习算法】之岭回归Ridge - L2 Rgularization

本人就职海外从事人工智能领域开发设计。 希望花时间总结下流行的机器学习算法,希望大家一起学习,欢迎指正!

Hyman Qiu 2316

从工艺到器件:用Silvaco ATLAS仿真PIN二极管击穿电压的保姆级指南

本文详细介绍了使用Silvaco ATLAS仿真PIN二极管击穿电压的全流程指南,从工艺仿真基础搭建到器件结构构建,再到击穿特性仿真和结果分析。通过Silvaco工具链,工程师可以在设计阶段精准预测器件性能,优化击穿电压,提升研发效率。

weixin_34259816的博客 355

mysql中文乱码 go_Mysql binlog乱码问题研究-Go语言中文社区

新9代上线后,线上数据库的binlog日志导下来,发现有很多乱码的字符。类似的根据这篇文章,这些乱码的是通过base64位加密了。SHELL>mysqlbinlog--base64-output=DECODE-ROWS-v/opt/data/APP01bin.000001>file1.txt可以把base64转成可读的格式mysqlbinlog日志其实分为三种类型1.Sta...

weixin_32139147的博客 1235

从Transformer到蛋白质结构预测:手把手解读ESM系列模型的核心原理与实战价值

本文深入解析了ESM系列模型如何将Transformer架构创新应用于蛋白质结构预测,揭示了其从氨基酸序列到三维结构的高效预测机制。通过掩码语言模型预训练和注意力机制,ESM模型不仅捕捉蛋白质序列的远程相互作用,还在蛋白质工程改造、药物发现等领域展现出巨大实战价值,显著提升了结构预测速度和精度。

weixin_28744423的博客 318

mysql binlog-row-image_安全考虑,binlog_row_image建议尽量使用FULL

背景binlog_row_image这个参数是MySQL5.6新增的参数,默认值是FULL,在5.7版本默认值也是FULL,但今天我看到有客户的 MySQL5.7版本参数模板采用的是MINIMAL而不是FULL,我对这个修改表示疑惑。一般来说,对一个参数默认值作出修改,我们都应该考虑清楚影响范围,所以我准备做一次测试,并得出结论哪个参数值才是最佳设置。术语解释前提:binlog格式必须为row格式...

weixin_35045900的博客 502

基于STM32L4XX、HAL库的DP83822 以太网收发器(PHY)驱动程序设计

一、简介:DP83822是德州仪器(TI)推出的一款低功耗、高性能10/100Mbps以太网物理层收发器(PHY)。它具有以下主要特性:支持10BASE-T和100BASE-TX以太网标准低功耗设计,适合嵌入式应用MII/RMII接口,方便与微控制器连接内置自检和诊断功能支持自动协商和手动配置工业级温度范围(-40°C至+85°C)

zhusl6688的博客 525

Python 实战:全面解析“微信搜一搜”内容爬取,从入门到企业级架构

本文将带你从零搭建爬虫项目,采用 Requests、Scrapy、Selenium、Proxy 池、中间人监控(如 Fiddler/mitmproxy)、分布式调度、数据库持久化、断点续抓等方案,实现可持续、抗封能力强的内容抓取系统。理解“微信搜一搜”页面结构与 Javascript 渲染逻辑;使用 Scrapy 框架搭建分布式爬虫;使用 Selenium 模拟浏览器抓取;构建代理池提升爬取成功率;对抗验证码、IP 封禁与 cookie 过期问题;

2201_76125261的博客 1393

mysql binlog-row-image=minimal_安全考虑,binlog_row_image建议尽量使用FULL

背景binlog_row_image这个参数是MySQL5.6新增的参数,默认值是FULL,在5.7版本默认值也是FULL,但今天我看到有客户的 MySQL5.7版本参数模板采用的是MINIMAL而不是FULL,我对这个修改表示疑惑。一般来说,对一个参数默认值作出修改,我们都应该考虑清楚影响范围,所以我准备做一次测试,并得出结论哪个参数值才是最佳设置。术语解释前提:binlog格式必须为row格式...

weixin_39568781的博客 1008

【EB-03】 AUTOSAR builder与EB RTE集成

打开EB工具后,在EB的步骤是:执行MultiTask(2)-> Mapping Component to Partitions(4)->Task Mapping(5)-> SvcAs_Trigger(7)-> Code Generation(8)如涉及新增BSW Module,也需要重复以上步骤。

libuping2023的博客 960

mysql binlogrowimage_安全考虑,binlog_row_image建议尽量使用FULL

背景binlog_row_image这个参数是MySQL5.6新增的参数,默认值是FULL,在5.7版本默认值也是FULL,但今天我看到有客户的 MySQL5.7版本参数模板采用的是MINIMAL而不是FULL,我对这个修改表示疑惑。一般来说,对一个参数默认值作出修改,我们都应该考虑清楚影响范围,所以我准备做一次测试,并得出结论哪个参数值才是最佳设置。术语解释前提:binlog格式必须为row格式...

weixin_35696075的博客 765

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

binlog_row_image参数修改测试

binlog_row_image参数修改实践一、binlog_row_image参数解释二、场景测试 题外话 今天开发同事在测试环境用canal抽取数据时,遇到问题,度娘发现大概率是参数binlog_row_image的设置导致,于是做了相应的检查测试。 一、binlog_row_image参数解释 前提 binlog格式必须为row格式或者mixed格式,不可以是statement格式。 名称解释: before image:前镜像,即数据库表中修改前的内容。 after image:后镜像,即数据库

南风TaT的博客 2736

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Mysql的binlog_row_image参数

binlog_row_image参数是5.6版本后新增的参数,5.7默认为full 该参数的格式有三种,分别是FULL、MINIMAL、NOBLOB。 STATEMENT binlog日志记录所有前镜像和后镜像。(安全性高,节省空间弱) MINIMAL binlog日志的前镜像只记录唯一识别列(唯一索引列、主键列),后镜像只记录修改列。(安全性弱,节省空间强) noblob binlog记录所有的列,就像full格式一样。但对于BLOB或TEXT格式的列,如果他不是唯一识别列(唯一索引列

weixin_45048541的博客 639

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

binlog工具_MySQL5.6新增的参数binlog_row_image到底怎么设置-爱可生

背景binlog_row_image这个参数是MySQL5.6新增的参数,默认值是FULL,在5.7版本默认值也是FULL,但今天我看到有客户的 MySQL5.7版本参数模板采用的是MINIMAL而不是FULL,我对这个修改表示疑惑。一般来说,对一个参数默认值作出修改,我们都应该考虑清楚影响范围,所以我准备做一次测试,并得出结论哪个参数值才是最佳设置。术语解释前提:binlog格式必须为row格式...

weixin_39862697的博客 643

mysql快速产生binlog_mysql的binlog

背景开发了一段时间的canal,中间也陆陆续续出现了一些问题,今天趁着新开发的canal引擎已经上线,简单汇总下之前所遇到的一些问题,本篇则主要是说明一下与MySQL相关的一些问题;关于canal的介绍可以点击这里。关于MySql binlog的概念,可以看下MySql官网(中文)的这篇介绍:MySQL服务器日志;想要先简单理解下binlog日志的,可以参考如下内容:在MySql中常用的数据库表结...

weixin_32591379的博客 1398

在 Azure Database for MySQL 上使用 gh-ost:--azure 标志、binlog_row_image 与迁移实操指南

`gh-ost` 是 GitHub 开源的 MySQL 在线无触发器 Schema 迁移工具,本文聚焦其在 **Azure Database for MySQL** 托管环境下的落地实践:Azure 托管实例在权限模型、binlog 参数、主从账号体系上与自建 MySQL 存在差异,因此官方为其提供了专门的 `--azure` 标志与配套参数组合。阅读完本文,你将掌握在 Azure Databas

gitblog_00559的博客 773

[小技巧8]MySQL中binlog日志的三种模式解析,以及event解析

MySQL中binlog日志的三种模式解析,以及event解析

分享工作中解决的问题,希望能帮到你 1205

实战:使用 MyFlash 从 ROW 格式 Binlog 恢复被多次删除的表数据

确定时间范围与日志文件] → [MyFlash 生成反向 Binlog]↓[测试库创建临时表] ← [mysqlbinlog 解析并替换表名]↓[导入临时表并验证数据]↓[通过 NOT EXISTS 安全合并到生产表]MyFlash极大简化了闪回操作,不用费力手写大量反解析脚本。牢记:“一切操作先上测试环境” 是数据库恢复的黄金法则。恢复结束后,应立即排查误删根因,同时加强备份与 Binlog 保留策略,考虑部署延时从库来争取应急时间。希望这份指南能帮助你在关键时刻快速找回宝贵数据。

qq_40273718的博客 700

MySQL Binlog(二进制日志)的三种模式

MySQL Binlog是MySQL的核心日志机制,支持三种模式:STATEMENT、ROW和MIXED。STATEMENT记录原始SQL语句,日志量小但存在主从数据不一致风险;ROW记录行数据变更,保证数据一致性但日志量大;MIXED自动切换两种模式,但不推荐生产使用。ROW模式是生产环境首选,可通过binlog_row_image参数优化日志量。配置时需注意不同模式的特点及切换方式,解析Binlog可使用mysqlbinlog工具,ROW模式还支持数据闪回。面试常考察三种模式的原理、优缺点及实际应用场景

Nicky's blog 911

参数binlog_row_image设置MINIMAL,你今天被坑了吗?

今天网友"芬达"跟我讨论一个参数binlog_row_image,在什么场景下设置为MINIMAL,我觉得这个案例很有意义,尤其是在生产环境中,要慎重设置这个参数。首先这个MINIMAL,只会在binlog里记录被影响的行,而不能像默认的FULL一样,记录完整的变更前和变更后的所有记录,这里就会产生一个问题,数据被误更改,无法用mysqlbinlog等工具闪回,另外大数据那边用canal抽binl...

weixin_33972649的博客 183
上一篇: 爱可生产品经理分享大规模告警系统实践
下一篇: 大规模集群之告警系统实践
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值