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.
两种日志记录写入磁盘的时间点不同,二进制日志只在事务提交完成后进行一次写
MySQL怎么清除日志?
mysql如果开启binlog日志,长时间就会积累很多占用磁盘空间的binlog日志。
一般清理这些日志就可以达到节省磁盘空间的要求。
首先登录mysql
mysql> show binary logs;
mysql> purge binary logs to 'mysql-bin.000098';
mysql> show binary logs;
这样你就发现mysql-bin.000098之前的mysql-binlog日志都已经删除了。
如果平时用不到mysql-bin log日志,可以在
my.cnf
里面注销关闭,然后重启mysql就不产生binlog日志了。但是平时我们如果遇到数据需要回复,还是最好能开启binlog日志,这样数据回复的时候就有一个保障。