MySQL日志之binlog,redo log

目录

1.binlog

概念:

作用:

格式:

写入操作:

2.redo log

概念:

作用:

redo log在MySQL操作数据时的实现:

查询时:

更新时:

写入操作:

概念:

刷盘策略:

自动刷盘操作:


1.binlog

概念:

binlog,记录所有语句的更新操作(即只要增删改,不包含查)

作用:

同步数据,保证数据的一致性

格式:

statement:记录完整的SQL语句;

                但可能导致数据不一致(比如实时性操作使用了NOW())

row:不仅记录完整的SQL语句,还记录操作的具体数据(但这个数据需要解析才能看到);

                保证了数据一致,但消耗大量资源

mixed:statement和row的混合;

                MySQL自己判断是否导致数据不一致:

                        不一致:使用row格式

                        一致:使用statement格式

写入操作:

事务执行过程中,先将日志写入binlog cache缓存中,事务提交时,将binlog cache缓存写入binlog日志中

2.redo log

概念:

redo log,重做日志

作用:

使得MySQL拥有崩溃恢复能力,当MySQL出现异常,重启时能够使用redo log恢复数据

redo log在MySQL操作数据时的实现:

查询时:

数据以页为单位,查询时会从硬盘中加载每一个数据页,放到缓冲池中;之后的查询先从缓冲池查询,未命中再从硬盘加载;

更新时:

先从缓冲池更新,将更新日志记录到redo log buffer的缓存中,然后再刷盘到redo log文件中

写入操作:

概念:

也叫做刷盘操作,将redo log buffer的缓存内容刷盘到实际redo log日志中

刷盘策略:

InnoDB提供了innodb_flush_log_at_trx_commit,支持三种策略:

0:每次事务提交时不进行刷盘

1:每次事务提交时进行刷盘(默认)

2:每次事务提交时只把redo log buffer缓存内容写入文件缓存,然后再进行刷盘

自动刷盘操作:

轮询刷盘:InnoDB的一个后台线程,每隔1s就将redo log buffer缓存内存写到文件缓存,然后进行刷盘

主动刷盘:redo log buffer空间得到innodb_log_buffer_size一半就主动刷盘

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值