binlog 是 MySQL 的 Server 层实现的日志,所有存储引擎都可以使用;
redo log 是 Innodb 存储引擎实现的日志;
binlog是逻辑日志
redolog是物理日志
binlog 是追加写,写满一个文件,就创建一个新的文件继续写,不会覆盖以前的日志,保存的是全量的日志。
redo log 是循环写,日志空间大小是固定,全部写满就从头开始,保存未被刷入磁盘的脏页日志。
binlog 用于备份恢复、主从复制;
redo log 用于掉电等故障恢复。
redolog行吗?他不行,因为redolog是循环写的,旧的会被覆盖掉,所以只能是binlog
binlog 文件保存的是全量的日志,也就是保存了所有数据变更的情况,理论上只要记录在 binlog 上的数据,都可以恢复,所以如果不小心整个数据库的数据被删除了,得用 binlog 文件恢复数据。
其实这个说的一半对一半不对,binlog的能力是可以做数据恢复的,只不过用这个来做崩溃恢复有点麻烦。
用全量备份重搭实例,再利用增量binlog备份,恢复到误操作之前的状态。然后跳过误操作的SQL,再继续应用binlog。此法费时费力,不值得再推荐。
我们可以用binlog来恢复,只不过需要解析日志。但是用redo log恢复数据的话,就不需要再去解析日志的操作,直接对数据页进行操作,速度当然会更快。