李琪的技术专栏 System Research

MySql基础复习(5)---日志系统

2020-05-26
Clear Li

阅读:


记录一下学习到的两个mysql日志redo log(重做日志) binlog(归档日志)

redo log(重做日志)

属于:InnoDB

作用:当有一条记录需要更新的时候,InnoDB会把记录写在redo log里面。然后等系统空闲时写入磁盘。可以保证数据库即使发生异常重启,也不会对视之前提交的记录,也就是crash-safe 能力

大小:大小时固定的4GB 假如没有空间则会把最开始记录的数据写入磁盘。

类别:物理日志->记录的是在某个数据页上做了什么修改

bin log(归档日志)

属于:server层

作用:记录某个语句的原始逻辑,基于SQL语句来记录。例如某一行的某个字段改变为什么值

大小:无固定大小,写满一个文件后会切换到下一个文件,并不会覆盖以前的日志

类别:逻辑日志->记录某个语句的原始逻辑

三种模式

​ 1.statement: 基于sql语句来记录,遇到语句带uuid或者rand可能导致恢复的数据不一致

​ 2.row:记录的是行更改的情况,可以避免数据不一致

​ 3.mixed:默认仍然采用statement格式进行记录,但是一旦它判断可能会有数据不一致的情况 发生,则会采用row格式来记录

常用的查询 binlog 的sql

--查看当前binlog格式
SHOW VARIABLES like 'binlog_format'

image-20200526211012278

--查看当前binlog文件列表
show master logs

image-20200526211114299

--查看当前正在写入的binlog文件
show master status

image-20200526211151863

--查看binlog文件内容
show binlog EVENTS in 'MRLILAPTOP-bin.000167'

image-20200526211305102

总结

Bin log 用于记录了完整的逻辑记录,所有的逻辑记录在 bin log 里都能找到,所以在备份恢复时,是以 bin log 为基础,通过其记录的完整逻辑操作,备份出一个和原库完整的数据。 而redo log 记录的,即使异常重启,都会刷新到磁盘,而 bin log 记录的, 则主要用于备份。


Similar Posts