目录
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缓存内存写到文件缓存,然后进行刷盘文章来源:https://www.toymoban.com/news/detail-561653.html
主动刷盘:redo log buffer空间得到innodb_log_buffer_size一半就主动刷盘文章来源地址https://www.toymoban.com/news/detail-561653.html
到了这里,关于MySQL日志之binlog,redo log的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!