本文主要是介绍小白文 理解 Mysql undo_log redo_log bin_log,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
小白文 理解 Mysql redo_log undo_log bin_log
- undo_log
- redo_log
- bin_log
undo_log
这个日志记录的是记录
数据被修改前
的值。
例如:
假设account表中有个名字叫香蕉的人ID为1.
update account set name="蛇皮" where name="香蕉";
undo_log
记录的就是旧的数据,类似这样:
id | name |
---|---|
1 | 香蕉 |
undo_log
的作用就是为了回滚数据。
redo_log
redo_log
仅在InnoDB引擎产生,记录的是数据被修改后
的值。
假设account表中有个名字叫香蕉的人ID为1.
update account set name="蛇皮" where name="香蕉";
redo_log
记录的是被修改后的数据,类似这样:
id | name |
---|---|
1 | 蛇皮 |
redo_log
的作用是为了确保数据不会丢失,无论你是提交事务还是回滚事务都会被记录在redo_log
中。因为数据在被刷回磁盘前如果服务器挂了,可以通过redo_log
来直接恢复数据(具体是看数据页的LSN,判断是否需要恢复)。
我们知道mysql不同的引擎有不同的数据结构,如果你每次执行事务都刷回磁盘,那IO性能肯定会差的不可想象。
redo_log
不是每次都会被刷回磁盘,其中还有一层buffer
,不同的设置buffer
刷回文件的时机不同。
bin_log
bin_log
中只记录修改数据的日志,如update delete insert
等等,且记录方式为逻辑方式(SQL语句 这和Redis中的AOF很像),Mysql集群会用到,如果数据库需要手动恢复某一时间段的数据,也可以手动通过bin_log
恢复。
这篇关于小白文 理解 Mysql undo_log redo_log bin_log的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!