MySQL Binlog温故知新

news2024/11/26 10:31:42

目录

一、什么是Binlog

二、Binlog文件记录模式

三、Binlog 日志内容

四、常用的binlog日志操作命令

五、binlog日志中间件


一、什么是Binlog

BinlogBinary log)是MySQL的二进制日志,以二进制的形式记录了对于数据库的变更(DDLDMLDCL)不包括selectshow 操作。Binlog日志是以事件形式记录,还包含语句执行的消耗时间。

Binlog主要的使用场景

1. 用来查看mysql变更:通过mysqlbinlog工具来查看变更。

2. MySQL的备份恢复:通过mysqlbinlog工具来恢复数据。

 ps: 数据库备份其他方法,如 通过导出数据或者表文件的拷贝来保护数据、数据库复制-MySQL内部复制功能建立在两个或两个以上服务器之间,通过设定它们之间的主从关系来实现的。

3. MySQL的主从复制:在主库中开启Binlog功能,这样主库就可以把Binlog传递给从库,从库拿到Binlog后实现数据恢复从而达到主从数据一致

二、Binlog文件记录模式

Binlog文件名默认为“主机名_binlog-序列号”格式。也可以在配置文件中指定名称。
文件记录模式有STATEMENT, ROW和MIXED三种,具体含义如下:

STATEMENT(Statement-based-replication,SBR):基于语句的复制。每一天被修改数据的SQL都会
记录到master的Binlog中,slave在复制的时候SQL进程会解析成和原来master端执行过的相同的SQL再次执行。
优点:日志量少,减少磁盘IO,提升存储和恢复速度。
缺点:在某些情况下会导致主从数据不一致,比如last_insert_id(), now()等函数。

ROW(row-based replication, RBR): 日志中会记录每一行数据被修改的情况,然后在slave端对相同的
数据进行修改。
优点:能清楚记录每一个行数据的修改细节,能完全实现主从数据同步和数据的恢复。
缺点:批量操作,会产生大量的日志,尤其是alter table会让日志暴涨。

MIXED(mixed-based replication, MBR): 以上两种模式的混合使用,一般会使用STATEMENT模式保存Binlog,
对于STATEMENT模式无法复制的操作使用ROW模式保存Binlog,MySQL会根据执行的SQL语句选择写入模式。

三、Binlog 日志内容

binlog日志记录了所有的DDL和DML语句,一般来说开启binlog日志大概会有1%的性能损耗。
binlog日志包括两类文件
1)二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件
2)二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句select)语句事件。

文件结构:

 使用前提:

开启binlog日志->操作之前对数据进行备份->flush logs,将缓存存磁盘

四、常用的binlog日志操作命令

1)查看所有binlog日志列表
mysql> show master logs;
2)查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值
mysql> show master status;
3)flush刷新log日志,自此刻开始产生一个新编号的binlog日志文件
mysql> flush logs; 
4) 查看所有的binlog:
mysql> show binary logs;
5)show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] [row_count];
解释:
IN 'log_name' :指定要查询的binlog文件名(不指定就是第一个binlog文件)
FROM pos :指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
LIMIT [offset,] :偏移量(不指定就是0)
row_count :查询总条数(不指定就是所有行)
6)mysqlbinlog 两对非常重要的参数
--start-datetime --stop-datetime 解析某一个时间段内的 binlog;
--start-position --stop-position 解析在两个 position 之间的 binlog;
7)利用binlog日志恢复mysql数据

五、binlog日志中间件

数据最终一致性: 在数据库操作成功后,需要进行一些其他操作,如:发送一条消息到MQ中、更新缓存或者更新搜索引擎中的索引等

如何保证数据库操作与这些行为的一致性,就成为一个难题。以数据库与redis缓存的一致性为例:操作数据库成功了,可能会更新redis失败;反之亦然。很难保证二者的完全一致。

思路: 不要同时去更新数据库和其他组件,只是简单的更新数据库即可。

如果数据库操作成功,必然会产生binlog。之后,我们通过一个组件,来模拟的mysql的slave,拉取并解析binlog中的信息。通过解析binlog的信息,去异步的更新缓存、索引或者发送MQ消息,保证数据库与其他组件中数据的最终一致。

将模拟slave的组件,统一称之为binlog同步组件。目前有很多开源的实现,例如linkedin的databus,阿里巴巴的canal,美团点评的puma等。

当我们通过binlog同步组件完成数据一致性时,示意图如下:

 扩展:

Databus: 低延迟、可靠的、支持事务的、保持一致性的数据变更抓取系统。由LinkedIn于2013年开源。Databus通过挖掘数据库日志的方式,将数据库变更实时、可靠的从数据库拉取出来,业务可以通过定制化client实时获取变更并进行其他业务逻辑。

canal是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费

二者对比:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/101777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tesseract-OCR 和cnocr/cnstd

Tesseract-OCR学习系列 Tesseract-OCR学习系列(四)API - 简书 参考文档:https://github.com/tesseract-ocr/tesseract/wiki/APIExample 这篇文章介绍了GetComponentImages等基础api的用法 Python 自动识别图片文字—保姆级OCR实战教程 Py…

使用界面配置静态路由(保姆级教程)

啰嗦几句 因为写的很详细,保姆级别的,所以看起来内容很多,但是东西就那一点,你自己配个2、3遍就会了。期末考试也不用担心这个实验了。 使用Cisco Packet Tracer这个软件。 原文件下载 补充:下载后使用Cisco Packet T…

有源电力滤波器——低压配电系统

安科瑞 华楠 一、谐波的危害 ● 使公用电网中的设备产生附加谐波损耗,降低电网、输电及用电设备的使用效率。 ● 在三相四线制系统中,由于零线流过大量的3n次谐波电流,造成零线过热。 ● 谐波会产生额外的热效应,引起用电设备…

GitLab创建新分支并同步其它分支的内容(IDEA)

拉取项目到本地 选择对应项目并复制clone地址 打开IDEA,选择File–》New–》Project from Version Control 在弹出的对话框中粘贴刚才复制的地址 完成后项目就被拉取到本地对应目录中了 创建新分支 这里以master分支为例,其它分支同理 首先在GitL…

Linux Red Hat 8.0 find命令练习

find:主要用来查找字符串 常用参数: -name 搜索文件名 -iname 搜索文件名时大小写不敏感 -type d 目录、 f 普通文件、 l 符号链接 -size 指定搜索文件大小 -perm 按执行权限来查找 -user 按…

在线考试网站

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 模块划分:老师模块、班级模块、学生模块、课程模块、试题模块、试卷模块、 组卷模块、考试模块、答题模块 …

什么是项目风险管理?要如何执行风险管理?

项目风险管理是项目管理中重要组成部分之一,其影响着项目是否能成功最终交付的关键。虽然项目经理都无法准确地预测未来项目结果,但可以应用一种精简的风险管理流程来预测项目管理中的不确定性,并将这些不确定因素的影响降到最低。因此如何执…

基于Python+Django+Vue+MYSQL的邯郸地标美食导游平台

项目介绍 我的家乡是邯郸市。邯郸市我国为数不多的3000年没有改变过名字城市。我的家乡就是邯郸。在我的家乡有非常多的旅游景点和美食。为了让更多的人了解到邯郸的旅游景点和好吃的美食信息,我通过pythonvueelementui开发了本次的邯郸家乡网红旅游景点美食导游平…

CSS高级 DAY2

目录 选择器进阶 复合选择器 后代选择器 子代选择器 并集选择器 交集选择器 hover伪类选择器(就是鼠标悬停选择器) 背景有关属性 背景颜色 背景图片 背景平铺 背景位置 背景的复合属性 元素显示模式 块级元素 行内元素 行内块元素 元素显示…

SimpleDateFormat线程不安全解析以及解决方案

我们都知道SimpleDateFormat是Java中用来日期格式化的一个类,可以将特定格式的字符转转化成日期,也可将日期转化成特定格式的字符串。比如 将特定的字符串转换成日期 public static void main(String[] args) throws ParseException {SimpleDateFormat…

windows11打开隐藏的gpedit.msc本地组策略编辑器以及禁止自动更新系统

目录打开隐藏的gpedit.msc本地组策略编辑器windows11禁止自动更新系统打开隐藏的gpedit.msc本地组策略编辑器 1.新建.txt文本文件,输入如下代码 echo off pushd “%~dp0” dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtension…

a股行情接口功能特点

a股行情接口功能特点,如下: 1、支持A股历史交易查询; 2、包括股票数据; 3、每日A股收盘后更新当日交易数据,停牌不更新; 4、支持多股历史数据一次查询; 5、支持任何时间段查询;…

Linux进程概念(二)

Linux进程概念进程状态普通操作系统层面理解运行与阻塞挂起与阻塞Linux是怎么做的孤儿进程进程优先级什么是优先级如何改变优先级其他概念进程状态 进程状态分有: 运行 新建 就绪 挂起 阻塞 等待 停止 挂机 死亡… 状态其实就是返回的整形,就像某个数字…

【毕业设计_课程设计】基于 SVM 分类器的动作识别系统(源码+论文)

文章目录0 项目说明1 研究目的2 研究方法2.1 动作采集2.2 动作识别2.3 智能家居模拟3 论文目录4 项目工程0 项目说明 基于 SVM 分类器的动作识别系统 提示:适合用于课程设计或毕业设计,工作量达标,源码开放 1 研究目的 本项目对经典 SVM 二…

从企业关心的重点,带你了解商业智能BI

企业进行信息化建设,能通过业务信息系统以及规范化、标准化的业务流程存储高质量的业务数据,而这些数据则是数字化转型成功的重要条件。只有信息化和数字化共同发展,企业才能成功完成数字化转型,构建全新的商业模式,完…

kafka的客户端限流(资源配额)

前言 本文说明的是Kafka的客户端(生产者、消费者)与broker之前的限流,不是kafka的broker间topic副本同步的限流。 客户端限流 在kafka的官方文档,不叫限流,叫做资源配额:通过对客户端请求进行配额&#…

细节决定成败:探究Mybatis中javaType和ofType的区别

一. 背景描述 今天,给学生讲解了Mybatis框架,学习了基础的ORM框架操作及多对一的查询。在练习的时候,小张同学突然举手求助,说在做预习作业使用一对多查询时,遇到了ReflectionException 异常 。 二. 情景再现 1. 实…

css 网格布局

简介: 网格是由一系列水平及垂直的线构成的一种布局模式。一个网格通常具有许多的列(column)与行(row),以及行与行、列与列之间的间隙,这个间隙一般被称为沟槽(gutter)。…

智能摄像头视频监控,智和信通一站式解决方案

为进一步加强公共安全视频监控建设联网应用工作,推动整合各类视频图像资源,九部委联合发布的《关于加强公安视频监控建设网络化应用的若干意见》,明确以全域覆盖、全网共享、全时可用、全程可控为总目标。在大大加强城市社会安全保障能力的同…

Kafka Producer 开发

Kafka Producer 开发 kafka包含5个核心的API接口定义: Producer API - 允许应用程序往kafka集群中的topic中发送事件消息Consumer API - 允许应用程序从kafka topic 中读取数据Streams API - 允许对输入数据流进行数据计算、转换,并发送到其他主题进行…