本文已参与「新人创作礼」活动,一起开启掘金创作之路
MySQL日志系统:redolog、binlog、undo log 区别与作用
MySQL日志系统:redo log、binlog、undo log 区别与作用
事务日志作用及记录过程
事务要保证ACID的完整性必须依靠事务日志做跟踪,每一个操作在真正写入数据数据库之前,先写入到日志文件中,如要删除一行数据会先在日志文件中将此行标记为删除,但是数据库中的数据文件并没有发生变化,只有在(包含多个sql语句)整个事务提交后,再把整个事务中的sql语句批量同步到磁盘上的数据库文件
在事务引擎上的每一次写操作都需要执行两遍:
1.先写入日志文件中
写入日志文件中的仅仅是操作过程,而不是操作数据本身,所以速度比写数据库文件速度要快很多.
2.然后再写入数据库文件中
写入数据库文件的操作是重做事务日志中已提交的事务操作的记录.
日志组
一般不止设置一个日志文件,一个文件写满之后使用另外一个日志文件提高服务器效率.
日志文件的日志同步到磁盘后空间会自动释放,单个日志文件不宜设置过大,如果日志文件过大mysql进程在把日志同步到数据文件的时候可能会崩溃
一旦MySql数据库发生异常,在重启的过程中只要去查看undo/redo中的记录,就可以恢复这个事务期间发生的所有操作
刷盘时机
- 每次commit都去刷盘
- 每次将数据写到内存缓冲中(内存缓冲指的是对应的mysql进程的缓冲),每秒去做一次刷盘
- 每次将数据写到磁盘缓存缓冲中(磁盘缓冲指的是操作系统内核空间),每秒去做一次刷盘