binlog 和 redolog的区别

为什么MySQL 可以恢复到半个月内任意一秒的状态!!!?

更新流程两个重要模块 **redo log(重做日志)**和 binlog(归档日志)
从这个问题,引入两个日志模块的讨论

物理日志 redo log——InnoDB引擎特有的日志(crash-safe)

  1. WAL 技术:Write-Ahead Logging,它的关键点就是先写日志,再写磁盘
  2. 一条记录更新时,InnoDB引擎会先记录到redo log中,并更新内存,一般空闲时再更新到磁盘里面。记录的是更改后的值!
  3. redo log是固定大小的。比如可以配置为一组 4 个文件,每个文件的大小是 1GB,那么这块“粉板”总共就可以记录 4GB 的操作。从头开始写,写到末尾就又回到开头循环写,
  4. 有了redo log ,即使数据库异常重启,提交记录也不会丢失——crash-safe

总结:redo log 他记录的是数据库当前值,实际上是防止系统崩溃的,当系统崩溃重启时,可以通过redo log 来恢复崩溃之前的页面。
binlog 和 redolog的区别

binlog 归档日志:(以后备份恢复用到)

(1)binlog 是 MySQL 的Server层实现的,所有引擎都可以使用。
(2)binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”.redo log 是物理日志,记录的是“在某个数据页上做了什么修改”
(3)binlog 是可以追加写入的。“追加写”是指binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。redo log 是物理日志,记录的是“在某个数据页上做了什么修改”。
3. 如何恢复到半个月任意一秒的状态
保存半个月的binlog,定期备份
依次提取当时的binlog,按照时间顺序重放的到需要的时刻

总结:binlog是做备份的,binlog 中记录的是sql语句,或行的内容。当想恢复到之前几小时,几天或者几个月的数据时,就需要依次提取当时的binlog,按照时间顺序重放的到需要的时刻。

两阶段提交

redo log写入拆成两阶段:prepare,commit——为了让两份日志逻辑一致
binlog 和 redolog的区别

备份周期

  1. 定期全量备份的周期“取决于系统重要性,那么在什么场景下,一天一备会比一周一备更有优势呢
    备份数据库的周期直接影响到了恢复的速度,一天一备的话,恢复时只需要重新执行最近一天的数据库修改操作。而一周一备则需要做很多。所以在对于系统恢复速度很敏感的系统,最好使用一天一备,甚至一小时一备等等。