redo log和bin log存储区别?
redo log和bin log都是MySQL中的日志文件,但是它们的作用和存储方式有所不同。
redo log
redo log是InnoDB存储引擎特有的一种日志文件,用于记录数据库的修改操作(增删改)。当执行一个事务时,InnoDB会将修改操作记录到redo log中,然后再将修改操作应用到内存中的数据页中。如果在此期间发生异常导致MySQL崩溃,redo log中的操作可以帮助InnoDB恢复到上一次修改前的状态。
redo log的存储方式是循环写入,当redo log写满后会从头开始覆盖之前的内容。因此,如果MySQL崩溃后重启,redo log中的数据可能已经被覆盖,此时就无法通过redo log恢复数据了。
bin log
图片来源:网络
bin log是MySQL的一种日志文件,用于记录所有的数据库操作(包括查询和修改)。bin log可以用于数据备份、数据恢复、数据同步等操作。bin log记录的内容包括操作的SQL语句和执行时间等信息。
bin log的存储方式是追加写入,每次写入都会添加到文件末尾。因此,即使MySQL崩溃后重启,bin log中的数据也不会丢失,可以通过bin log进行数据恢复。
综上所述,redo log和bin log都是MySQL中的日志文件,但是它们的作用和存储方式有所不同。redo log用于记录InnoDB存储引擎的修改操作,用于数据恢复;而bin log用于记录所有的数据库操作,用于数据备份、数据恢复和数据同步。
redo log是在InnoDB存储引擎层产生,而binlog是MySQL数据库的上层产生的,并且二进制日志不仅仅针对INNODB存储引擎,MySQL数据库中的任何存储引擎对于数据库的更改都会产生二进制日志。
2.
两种日志记录的内容形式不同。MySQL的binlog是逻辑日志,其记录是对应的SQL语句。而innodb存储引擎层面的redolog日志是物理日志,保存了数据库中的值。
3.
两种日志记录写入磁盘的时间点不同,二进制日志只在事务提交完成后进行一次写
binlog是如何保证事务正确提交?
binlog是MySQL中的二进制日志,用于记录数据库的变更操作。它通过在事务开始和结束时记录对应的BEGIN和COMMIT事件来保证事务的正确提交。
当事务提交时,binlog会将事务的所有操作以二进制格式记录下来,并在写入磁盘之前确保所有操作都已成功执行。
这样,即使在事务提交后发生故障,MySQL可以通过回放binlog来恢复事务的一致性,保证事务的正确提交。