关于一次两段式提交和数据库恢复数据我的一些想法

binlog是服务层的功能,而redolog是innodb引擎的功能,binlog主要用于主从复制,redolog主要用做数据的恢复,我们必须保证binlog和redolog日志数据的一致性。恢复数据时也必须遵守此一致性。

1.如果只写一次redolog会出现什么问题?

先写binlog后写redolog:如果此刻有大量的请求,binlog是逻辑日志,写的特别快,而redolog日志记录的比较慢,如果此刻突然宕机,两者数据会出现大量不一致,只能通过binlog日志手动恢复数据。

先写redolog后写binlog:如果宕机,需要利用redolog恢复数据,但是需要每次去binlog查看该数据是否已经写入binlog,影响效率。

2.宕机了怎么恢复数据

在MySQL宕机后恢复时,如果发现 redo log 中某数据为 commit 状态,则表示在binlog 一定落盘了,则可以直接恢复;如果发现 redo log 中某数据为 prepare 状态,则查看 binlog 中是否存在该数据,如果 binlog 存在,就执行恢复逻辑;否则,就丢弃 redo log 记录的该事务,以保证 redo log 和 binlog 的数据一致性

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