【发布时间】:2020-01-18 20:43:27
【问题描述】:
在我的理解中,mysql binlog 完全可以作为 InnoDB 的 redo log。
那么,在启用binlog之后,为什么InnoDB非要切换到使用binlog,还要同时写redo log呢?这不会显着降低数据库写入性能吗?
除了简化设计和实现之外,这样做有什么好处吗?
AFAIK,在保证 ACID 合规性的情况下同时启用两个日志,会出现以下问题:
- 每条具有相同含义的日志记录必须分别写入两次。
- 每次提交事务或事务组时刷新两个日志。
- 为确保两个日志文件之间的一致性,使用了复杂且低效的方式,例如 XA (2PC)。
因此,所有其他产品似乎只使用一组日志(SQL Server 称为 Transaction log,ORACLE 称为 redo log,PostgreSQL 称为 WAL)来完成所有相关工作。是不是只有 MySQL 必须同时打开两组日志才能保证 ACID 合规性和强一致性主从复制?
有没有办法实现 ACID 合规性和强一致性半同步复制,同时只启用其中一个?
【问题讨论】:
标签: mysql transactions mariadb innodb acid