IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL Binlog温故知新 -> 正文阅读

[大数据]MySQL Binlog温故知新

目录

一、什么是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 数据库增量日志解析,提供增量数据订阅和消费

二者对比:

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:16:02  更:2022-12-25 11:19:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/22 18:40:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码