学习内容 : MySQL日志系统
与查询流程不一样的是,一条SQL更新语句的执行流程还涉及两个重要的日志模块:物理日志redo log和逻辑日志binlog。
1.重要的日志模块:redo log
redo log 用于保证 crash-safe 能力。innodb_flush_log_at_trx_commit 这个参数设置成 1 的时候,表示每次事务的 redo log 都直接持久化到磁盘。这个参数我建议你设置成 1,这样可以保证 MySQL 异常重启之后数据不丢失。
2.重要的日志模块:binlog
sync_binlog 这个参数设置成 1 的时候,表示每次事务的 binlog 都持久化到磁盘。这个参数我也建议你设置成 1,这样可以保证 MySQL 异常重启之后 binlog 不丢失。
3.两阶段提交
可以看到,如果不使用“两阶段提交”,那么数据库的状态就有可能和用它的日志恢复出来的库的状态不一致。
redo log 和 binlog 都可以用于表示事务的提交状态,而两阶段提交就是让这两个状态保持逻辑上的一致。
以上就是今天的学习内容,了解执行原理,更有助于学校mysql。
网友评论