天天看点

MySQL的 redo undo binlog 几种log

redo log : 记录一次写的操作,当服务器挂了的时候可以用是redo log 恢复数据。

undo log : 记录一次写的操作的相反操作,事务回滚的时候,就把他拿出来执行一遍。数据就恢复了原来的样子。

binlog : 做主从同步时候,主服务器会生成binlog , 然后从数据库会启动一个IO线程去不断地拉取binlog,拉到本地执行一遍,然后两者数据就同步了。

出现极端情况怎么办:

情况1 : 如果我们先写 binlog 在写redo log,写完binlog的时候,数据库挂掉了。这个时候不就会出现数据不一致吗?

情况2: 如果我们先写redo log 再写 binlog ,但是在写完redo log的时候出现挂机了。数据也是不一致的。

数据库采用两阶段提交的方式保证数据一致性。

首先 写完 redo log 并吧那条数据 标为 预提交状态, 然后再去写bin log,无论是什么阶段 数据库挂了。我们恢复的时候,看binlog , binlog要是完整(就是那条数据存在) 那就吧redo log 的那条数据写为提交,要是不完整就删了那条数据。。ok数据一致了 。