mysql实战45讲疑问

redolog和binlog,redolog两阶段提交,如果写完binlog,提交事务时出错了,那么redolog无法提交事务。但binlog已经写完了,那两日志也不一致了怎么办呢?还是说不会出现这种情况呢

  • 这篇文章:MySQL实战45讲总结 也许有你想要的答案,你可以看看
  • 除此之外, 这篇博客: 吃透MySQL(十一):undolog redolog binlog原理详细介绍中的 2,binlog刷盘时机 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 对于 InnoDB 存储引擎而言,只有在事务提交时才会记录 biglog ,此时记录还在内存中,那么 biglog是什么时候刷到磁盘中的呢?mysql 通过 sync_binlog 参数控制 biglog 的刷盘时机,取值范围是 0-N:

    • 0:不去强制要求,由系统自行判断何时写入磁盘;
    • 1:每次 commit 的时候都要将 binlog 写入磁盘;
    • N:每N个事务,才会将 binlog 写入磁盘。

    从上面可以看出, sync_binlog 最安全的是设置是 1 ,这也是 MySQL 5.7.7之后版本的默认值。但是设置一个大一些的值可以提升数据库性能,因此实际情况下也可以将值适当调大,牺牲一定的一致性来获取更好的性能。