【小墨mysql】mysql系列之二---binlog

一,前言

大家好,我是小墨。
这一章我们接着深入了解mysql,我们讲讲mysql的binlog(binary log 二进制日志),binlog记录了mysql数据更新
或者潜在发生更新的sql操作,保存在磁盘中。

二,binlog介绍

1,binlog配置

我们可以在配置文件my.cnf中配置

log_bin=ON#打开binlog日志
log_bin_basename=/var/lib/mysql/mysql-bin #binlog日志的基本文件名,后面会追加标识来表示每一个文件
log_bin_index=/var/lib/mysql/mysql-bin.index #指定的是binlog文件的索引文件,这个文件管理了所有的binlog文件的目录
或者直接
log-bin=replicas-mysql-bin #mysql会根据这个配置自动设置log_bin为on状态,自动设置log_bin_index文件为你指定的文件名后跟.index
具体的路径会根据mysql部署的路径设置为/var/lib/mysql

1)然后查询 show variables like ‘%log_bin%’,可以看到我们的配置。
在这里插入图片描述
2)开启binlog后,会在数据目录(默认)生产host-bin.n(具体binlog信息)文件及host-bin.index索引文件(记录binlog文件列表)。
查询使用语句: show binary logs; //查看binlog文件列表,
在这里插入图片描述

3)查询show master status;可以看到当前二进制日志文件的状态信息,显示正在写入的二进制文件,及当前position
在这里插入图片描述

2,binlog格式

使用show variables like ‘binlog_format’ 可以查询使用哪种模式的日志
binlog文件中存储的内容称之为二进制事件,简称事件。我们的每一个数据库更新操作(Insert、Update、Delete等),都会对应的一个事件
主要分三种:

  • statement模式,binlog记录执行的sql。只需要记录执行语句的细节和上下文环境,避免了记录每一行的变化。默认使用这种,执行效率高。
  • Row模式:binlog记录每一行的每个字段变化前后得到的值,保存记录被修改细节,不记录sql语句上下文相关信息,更加准确,但是记录的日志量较大,干扰多。
  • mix模式:默认基于语句复制,一旦发现基于语句无法精确复制时,会切换为基于行复制,各取所长。

3,复制过程

我们知道binlog常见用于主从数据库复制,我们看下此时流程如何:

  1. master在每次准备提交事务完成更新前,写记录到二进制日志中。
  2. slave启动i/o线程读取主库binlog中事件,记录到自己的relay log中
  3. slave mysql启动线程去从relay log读取事件并执行,更新slave数据库数据

在这里插入图片描述

三,应用场景

我们常见的binlog应用场景有:读写分离,数据恢复,数据最终一致性

1,读写分离

  • 主库master负责所有更新操作
  • 多个slave都连接到master上,获取binlog在本地写数据,实现数据复制
  • 应用层面判断sql为 写,改,删时定位到主库去进行,而查询操作的话还得根据是否需要高度的数据一致性,忍受短时间的不一致可以全部放到slave上进行,多个slave之间进行负载均衡。

2,数据恢复

当数据库被误删时需要恢复时。可以反解析binlog,binlog恢复可以指定pos点恢复/部分恢复,

mysqlbinlog --start-position=??–stop-position=?? mysql-bin.000008 > test.sql
先转成sql然后再导入库中。

3,数据一致性

这里其实是有一些需求如机房的冗余灾备需求,等等,我们可以把binlog放到kafka,由另一个机房数据库去消费
在这里插入图片描述

四,总结

我们在这篇文章总结了binlog的具体格式,使用方式,使用场景等,做了一个比较笼统的介绍,希望各位看完有收获,欢迎评论和点赞。

参考文章
http://www.jiangxinlingdu.com/mysql/2019/06/07/binlog.html
https://zhuanlan.zhihu.com/p/33504555

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值