学习过程中问题处理

1.如果只用redolog或者只用binlog可行吗
不可行

redo log称为重做日志,用于记录事务的变化,记录的是数据被修改之后的值。InnoDB采用redo log来保证事务更新的一致性和持久性。
在MySQL中,如果你要更新一条语句,需要带更新条件,比如update T set name = ‘god-jiang’ where id=6,一般都是先查询到id=6的语句,然后再进行更新操作。具体操作:当有一条记录需要更新的时候,InnoDB引擎会先把记录写到redo log中,并更新内存,这个时候更新就算完成了。同时,InnoDB引擎会在适当的时候(系统空闲时),将这个操作记录更新到磁盘中,这个更新往往是在系统比较空闲的时候。

binlog主要用来进行POINT-IN-TIME(PIT)的恢复及主从复制环境的建立。从表面上看它和redo log非常相似,都是记录了对于数据库操作的日志,但是从本质上看,还是有着非常大的不同。

redo log和binlog的区别:
首先,redo log是在InnoDB存储引擎层产生,而binlog是在数据库上层产生的,并且binlog不仅仅针对InnoDB存储引擎,MySQL数据库中任何存储引擎都会产生binlog
其次,两种日志的内容记录不同。binlog是一种逻辑日志,其记录的是对应的SQL语句,而redo log是一种物理日志,其对应的是对于每个页的修改
最后,两种日志写入磁盘的时间点不同,binlog只在事务提交完成后进行一次写入,而redo log在事务进行中不断的写入,表现为不是随事务提交的顺序写入
binlog一般作为恢复数据使用,主从复制搭建,而redo log通常作为MySQL异常宕机或者介质故障后的数据恢复使用

redo log可以保存crash-safe能力,可以保证MySQL异常重启数据不丢失
binlog可以记录对应的SQL语句,也可以保证MySQL异常重启数据不丢失

2.为什么 redo log 具有 crash-safe 的能力,是 binlog 无法替代的
redo log :一个固定大小,“循环写”的日志文件,记录的是物理日志——“在某个数据页上做了某个修改”。
binlog :一个无限大小,“追加写”的日志文件,记录的是逻辑日志——“给 ID=2 这一行的 c 字段加1”。

redo log 和 binlog 有一个很大的区别就是,一个是循环写,一个是追加写。也就是说 redo log 只会记录未刷盘的日志,已经刷入磁盘的数据都会从 redo log 这个有限大小的日志文件里删除。binlog 是追加日志,保存的是全量的日志。

当数据库 crash 后,想要恢复未刷盘但已经写入 redo log 和 binlog 的数据到内存时&#x

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值