Mysql 相关日志【bin log 和 redo log】
WAL技术(Write-Ahead Logging):先写日志,再写磁盘
redo log:重做日志,InnoDB引擎特有的日志,文件大小固定,物理日志【记录的是在某个数据页上做了什么修改】,循环写,空间固定会用完;
Binlog;归档日志,binlog是Mysql的Server层实现的,所有引擎都可以使用,逻辑日志,记录SQL的原始逻辑【记录SQL语句】,追加写入【binlog文件写到一定大小后切换到下一个,并不会覆盖以前的日志】
Carch-safe:服务器重启后或者异常重启后,所有已经提交的事务生成的数据不会丢失
利用WAL技术,数据库将日志随机写转换成了顺序写,大大提升了数据库的性能
重做日志文件【redo log】
Redo log用于记录执行事务的操作【insert, update, delete】,这些修改会先写入缓冲池的redo log buffer,然后再异步地刷新到磁盘的redo log文件
重做日志的作用:
1、持久性保证:如果数据库在系统崩溃后重新启动,重做日志可以用来恢复未写入数据文件但已记录在日志中的事务更改
2、异步写入:通过重做日志,InnoDB 可以将事务的更改先写入日志,然后再异步地刷新到磁盘上的数据文件。这提高了性能,因为磁盘 I/O 操作通常比内存操作慢得多
崩溃恢复:在数据库恢复期间,重做日志用于重新应用那些在系统崩溃时尚未写入数据文件的更改
重做日志的结构
重做日志文件:通常是一组固定大小的文件,它们循环使用。当一个文件被写满后,InnoDB 会开始写入下一个文件,并在必要时覆盖最旧的日志文件(如果它们不再需要用于恢复操作)
日志缓冲区:在内存中,InnoDB 维护了一个重做日志缓冲区,用于暂存待写入重做日志文件的数据;当缓冲区满或事务提交时,数据会从缓冲区刷新到重做日志文件中
重做日志与二进制日志(Binary Log)的区别:
1、目的不同:重做日志主要用于确保事务的持久性,而二进制日志主要用于复制和数据恢复
2、内容不同:重做日志包含修改数据页所需的详细信息,而二进制日志包含描述数据库更改的“事件”
3、位置不同:重做日志位于数据库存储引擎的文件系统中,而二进制日志通常位于数据库服务器的文件系统中
redo log buffer注解:
1、InnoDB首先将重做日志信息先放入到redo log buffer,然后按照一定频率将其刷新到重做日志文件
2、重做日志缓存不需要设置过大,因为一般情况下每一秒钟会将redo log buffer刷新到日志文件,用户只需要保证每秒产生的事务量在这个缓冲大小之内即可
redo log buffer内容刷新到重做日志文件的三种情况
1、Master Thread每一秒将redo log buffer刷新到重做日志文件
2、每个事务提交时会将redo log buffer刷新到重做日志文件
3、当redo log buffer剩余空间小于1/2时,redo log buffer刷新到重做日志文件
二进制日志【bin log】
Binlog文件的主要作用包括数据恢复、主从复制和数据审计等
1、数据恢复:如果MySQL数据库出现问题,如意外崩溃或用户误操作,可以通过Binlog文件来恢复数据。通过将Binlog中的操作反向执行,可以恢复到崩溃前的状态
2、主从复制:在MySQL的主从复制架构中,主服务器的Binlog文件被读取并发送到从服务器,从服务器再执行这些操作,从而保持与主服务器的数据同步
3、数据审计:Binlog文件记录了所有对数据库的更改,因此可以用于审计数据库操作,检查是否有未授权或异常的数据访问和更改
注意事项:
1、Bin log文件会占用一定的磁盘空间,因此需要定期清理或归档旧的Bin log文件
2、在高并发的环境下,Bin log可能会成为性能瓶颈,因此需要根据实际情况进行调优
3、在使用Bin log进行数据恢复或主从复制时,需要确保Bin log文件的完整性和一致性
Bin log为每个工作线程独立分配一个内存作为Bin log缓冲区:
事务在执行过程中会产生log event,这些log event首先被写入到Bin log的缓冲区中,待事务提交时,再将log event从缓冲区写入到外部的Bin log文件中;
先写 redo log buffer,然后在事务提交时再将数据写入 binary log buffer,并最终异步刷新到磁盘上的 binlog 文件中
Update T set c = c + 1 where ID = 2的执行流程,此时C为0
A.执行器先找引擎取ID=2这一行数据,ID是主键,引擎直接用树搜索找到这一行,如果ID
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
Java全新整理八股文 + 场景题 + 算法 精心设计,面试命中率超过80% 专栏优势: 1、问题和答案已经整理到位,答案更专业,可以直接回答,不需要额外总结! 2、场景题讲解清晰,适用于大部分场景的项目,并且持续更新中 3、分享学习心得【知识点的广度和深度,算法有哪些坑,如何准备面试等等】