mysql中的redolog,undolog,以及binlog的区别及各自作用是

mysql中的redolog,undolog,以及binlog的区别及各自作用是
最新回答
玩命丕玩心

2021-05-03 12:08:02

MySQL日志类型解析与作用

MySQL日志包含七种类型,分别是二进制日志(binlog)、重做日志(redo log)和回滚日志(undo log)等。

二进制日志(binlog)主要应用于数据复制和恢复,用于MySQL主从复制和数据恢复场景。

具体作用包括:用于MySQL主从复制,Master端开启binlog,将数据传递给Slave端并回放以实现数据一致;通过mysqlbinlog工具恢复数据。

值得注意的是,binlog不会记录不修改数据的语句(如Select或Show),并会重写日志中的密码以保证安全;binlog的写入时间在事务提交时,先缓存于binlog cache中,后续根据配置决定是否执行fsync,删除时间则由expire_logs_days参数配置,超过设定天数的非活动日志文件会被自动删除。

二进制日志格式包括STATMENT、ROW和MIXED三种,其中STATMENT基于SQL语句复制,ROW基于行复制,MIXED混合了STATMENT和ROW模式,通常使用STATEMENT模式保存binlog,而对于无法使用STATEMENT模式复制的操作则使用ROW模式。

重做日志(redo log)是为了确保事务的持久性,即事务提交后,对数据库的修改被永久保存。它包括内存缓冲区和磁盘文件两部分,MySQL执行DML语句时,先写入redo log buffer,后续一次性写入redo log file,实现先写日志后写磁盘的技术。

重做日志通过操作系统内核空间的缓冲区进行数据写入,先写入OS Buffer,再通过fsync()系统调用刷入redo log file。

回滚日志(undo log)是用于撤销回退的日志,主要在事务未提交前记录更新前的数据,以便在事务失败或回滚时进行回退。undo log的作用包括提供回滚和多个行版本控制(MVCC),在数据修改时同时记录redo和undo,以便在事务失败或回滚时进行相应的回滚操作。

undo log采用段(segment)方式记录,每个undo操作占用一个undo log segment。当执行rollback时,可以从undo log中读取相应内容进行回滚。undo log在实现持久性保护时也会产生redo log。

了解MySQL日志的类型和作用对于数据库管理至关重要,希望本文能帮助您更好地理解MySQL日志系统。