29|数据都在内存里修改,服务器或数据库宕机会丢数据吗?
页面内的变更
插入记录(insert)
- 深入了解
- 翻译
- 解释
- 总结
1. InnoDB使用REDO和UNDO来实现事物的ACID属性,保障数据不丢。 2. 数据库崩溃时,应用REDO日志可以将文件中的数据重新更新到最新版本,而应用UNDO日志可以将数据回滚到已提交的版本。 3. REDO记录描述了对物理页面的数据修改操作,包括MLOG_nBYTE和MLOG_WRITE_STRING等类型的记录格式。 4. REDO是通过事务执行过程中生成REDO日志和UNDO日志来保护数据不丢的。 5. 在事务提交时,REDO日志会被刷新到磁盘中,即使数据库崩溃,通过解析redo文件,可以重新执行redo日志,将数据页更新到最新的版本。 6. 如果在事务提交前数据库崩溃了,数据库启动时,会应用redo日志后,扫描Undo表空间,发现有事务还没有提交,就开始回滚事务,undo日志中记录了回滚事务需要的信息,回滚完成后,数据也不会有问题。 7. REDO记录按MTR分组,一个MTR中的REDO日志要么全部应用,要么全部丢弃。 8. InnoDB维护了日志系统的各个LSN号,通过这些LSN号来协调日志系统的线程。 9. REDO日志文件持久化到REDO文件中后,才真正保证了数据不丢。8.0.30版本开始,废弃了参数innodb_log_file_size和innodb_log_files_in_group,而改用参数innodb_redo_log_capacity。 10. 崩溃恢复(Crash recovery)是MySQL启动时的一个重要步骤,包括读取redo文件中的checkpoint记录、解析redo文件中的日志、执行redo和undo等步骤。
《MySQL 运维实战课》,新⼈⾸单¥59
全部留言(1)
- 最新
- 精选
- binzhang看到日志类型有mlog_undo_***, 写undo page的时候也会产生redo的吧?
作者回复: 是的,写undo page也会产生redo。 因为Undo page也是缓存到buffer pool中的,事务提交时,undo page也不会实时刷新,需要记录redo日志才能保证Undo的数据不丢。
2024-10-28归属地:美国