11.MySQL中都有哪些日志文件?
MySQL中的日志文件有错误日志、binlog
二进制日志、redolog
重做日志、undolog
回滚日志以及relaylog
中继日志。
- 错误日志:用于记录MySQL中的错误信息
- binlog日志:用于记录MySQL更新操作产生的数据变化
- redolog日志:用于持久化
- undolog日志:用于保证事务原子性
- relaylog日志:是在主从复制中从库需要执行的日志
12.你对MySQL主从同步原理了解吗?
- 首先,主库提交事务时,将数据变更记录到
binlog
日志文件中。 - 然后,从库读取到主库的binlog日志,将数据写入到从库的
relaylog
日志中。 - 最后,从库执行relaylog中的事件,完成主从同步。
13.redolog如何保证事务的持久性?
redolog重做日志,记录事务提交时数据页的物理修改。redolog主要有两部分组成,重做日志缓冲区redolog buffer
和重做日志文件redolog file
。redolog buffer存放在内存中,当内存中的buffer poll中的数据页发生变化时就会同步到redolog buffer中。然后,redolog buffer中的数据再同步到磁盘中的redolog file文件中。redolog file在内存中存在两份
,它们是循环写
的。
14.页修改之后为什么不直接刷盘?
页修改直接刷盘的性能很差
,数据页的大小默认是16KB。如果数据页只变化了几十字节,那么就需要整个数据
页刷盘,此外如果变化的数据页不相邻
,就会随机I/O
,性能很差。而一行redolog记录只占几十字节,支持顺序I/O,刷盘性能非常好。
15.binlog和redolog有什么区别?
binlog 是二进制日志文件
,主要用于记录数据发生的变化,用于主从同步。redolog是重做日志,记录数据的物理变化
,主要用于保证事务的持久化
。
16.undolog如何保证事务的原子性?
undolog是回滚日志,记录的是数据的逻辑变化
,主要用于保证事务的原子性。undolog中记录的是相反
的更新操作
SQL语句,在回滚时只需要执行undolog中记录的SQL语句即可。