binlog和redolog到底有啥区别,数据恢复到底用哪个

适用对象不同

binlog 是 MySQL 的 Server 层实现的日志,所有存储引擎都可以使用;
redo log 是 Innodb 存储引擎实现的日志;

文件格式不同

binlog是逻辑日志
redolog是物理日志
binlog和redolog到底有啥区别,数据恢复到底用哪个_第1张图片

写入方式不同

binlog 是追加写,写满一个文件,就创建一个新的文件继续写,不会覆盖以前的日志,保存的是全量的日志。
redo log 是循环写,日志空间大小是固定,全部写满就从头开始,保存未被刷入磁盘的脏页日志。

用途不同

binlog 用于备份恢复、主从复制;
redo log 用于掉电等故障恢复。

那数据库被删库跑路了,我们用啥回复?

redolog行吗?他不行,因为redolog是循环写的,旧的会被覆盖掉,所以只能是binlog
binlog 文件保存的是全量的日志,也就是保存了所有数据变更的情况,理论上只要记录在 binlog 上的数据,都可以恢复,所以如果不小心整个数据库的数据被删除了,得用 binlog 文件恢复数据。

那为啥崩溃恢复不用binlog,而用redolog?

binlog和redolog到底有啥区别,数据恢复到底用哪个_第2张图片
其实这个说的一半对一半不对,binlog的能力是可以做数据恢复的,只不过用这个来做崩溃恢复有点麻烦。
用全量备份重搭实例,再利用增量binlog备份,恢复到误操作之前的状态。然后跳过误操作的SQL,再继续应用binlog。此法费时费力,不值得再推荐。
我们可以用binlog来恢复,只不过需要解析日志。但是用redo log恢复数据的话,就不需要再去解析日志的操作,直接对数据页进行操作,速度当然会更快。

你可能感兴趣的:(mysql,数据库,mysql)