面试官:聊聊MySQL的两阶段提交的机制

两阶段提交保证数据一致性。

redolog 记录物理修改。

binlog记录逻辑SQL。

InnoDB 首先写入重做日志。

在MySQLServer之后写入binlog。

崩溃和重新启动时检查重做日志。

确认 XID 是否匹配 binlog。

如果不一致则回滚。

准备状态表示尚未提交。

提交状态表明已提交。

redolog 循环写入。

Binlog是额外写入的。

崩溃安全依赖于重做日志。

Master和Slave依赖binlog。

自己掂量一下。

必须了解的MySQL三大日志:binlog、redo log和undo log

MySQL主要的三个日志可以直接使用: binlog:记录SQL语句,用于主从复制。
STATMENT是少量,整个ROW都改了,MIXED是默认的。
sync_binlog=1 是安全的,=0 是快速的,但会丢失数据。
redolog:记录物理页更改,用于崩溃恢复。
innodb_flush_log_at_trx_commit=1 是安全且缓慢的,=0 是后台刷新。
undolog:记录用于undo的反向SQL。
支持MVCC,交易完成后会慢慢清除。

二进制日志: 主从复制所需。
ROW格式已完全改变,日志大但稳定。
sync_binlog 控制磁盘刷新。
默认情况下,每次出现都会刷新一次。
红学家: 事务持久化密钥。
记录页号的物理偏移量,后面写的很快。
innodb_flush_log_at_trx_commit=1 更稳定。
妇科医生: 反转和 MVCC 基础知识。
反向逻辑操作会被记录,并且事务不会被删除。
恢复期间,会重做redolog并验证binlog。
binlog_group_commit 同步从库。

自己掂量一下。