bin/redo log

https://juejin.cn/post/6860252224930070536
https://blog.csdn.net/weixin_34236572/article/details/112366986
逻辑日志:存储sql语句
物理日志:存储的是数据页内容(mysql数据最终存储的地方),
其记录就是数据页变更

binlog :二进制日志 在server层 该二进制日志存储的就是相应的sql语句(默认)

使用场景:主从复制 数据恢复

binlog在server层,只有在事务提交的时候才会进行记录,如何进行刷盘??
通过sync_binlog控制:
0:不强制系统自主选择
1:每次commit都刷盘 (mysql5.7默认)
N:n次commit 进行刷盘

binlog日志格式:
1.statement : 按照sql语句的方式记录,不需要记录每一行变化提高性能
2.row:基于行的复制

redolog:保证了事务的四大特性中的持久性(记:底层所以保证。引擎层)
mysql中的write ahead loging技术:先写日志再写磁盘
redolog就是先写缓冲再写磁盘

用户空间
内核
磁盘

redolog三种写方式
1.先写用户空间缓存,然后异步(拷贝内核同步磁盘)
2.写用户同步靠内,异步写磁盘
3.同步写用户拷贝内核写磁盘(性能差)

二者的区别:
大小:redolog 是 innodb自有,大小固定,binlog可以一直产生
实现:redo是innodb所以支持事务,bin是server所以不是事务
记录方式:redo是循环记录,圈的方式,会覆盖之前的。binlog末尾追加,回生成新文件不追加
使用场景:**crash-safe(突然宕机快速恢复):::必须是redo;bin是主从复制,数据恢复

二者相辅相成:
binlog只是归档使用,没有crash-safe能力
所以要有redolog但是不能只有redo他是innodb特有的;
但是redolog数据会被覆盖,要换引擎,数据大量恢复还是要binlog(server的)

undolog 使用mvcc : 版本连:保证数据的原子性,对数据库的操作,要么全部成功要么全部失败


image.png

image.png

整个复制过程无论Log的传输过程,还是回放过程,都是单线程的。而并行复制,就是把回放环节并行化了

Binlog本身是全局有序的,如果用多线程传输,还要重新排序和重组,可能得不偿失。

所谓并行回放,就是一次性从RelayLog中拿出多个事务,并行地执行;
1.不同库的事务可以并行,不同表的事务可以并行,不同行的事务可以并行。
2.commid如果在一个事务还没有结束之前,另外一个事务也开始进入提交阶段,说明这两个事务是在并行的,它们操作的是肯定是不同的数据记录。所以可以并行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容