大家都知道在MySQL中,在事务真正COMMIT之前,会将事务的binlog日志写入到binlog文件中。在MySQL的5.7版本中,提供了所谓的无损复制功能,该功能的作用就是在主库的事务对其他的会话线程可见之前,就将该事务的日志同步到从库,保证了事务可以安全地无丢失地复制到从库。 下面我们从源码来分析MySQL的事务提交以及事务在何时将binlog复制到从库的。 MYSQL_BIN_LOG::ordered_commit,这个是事务在binlog阶段提交的核心函数,通过该函数,实现了事务日志写入binlog文件,以及触发dump线程将binlog发送到Slave,在最后的步骤,将事务设置为提交状态。 我们来分析MYSQL_BIN_LOG::ordered_commit这个函数的核心过程,该函数位于binlog.cc文件中。 源码分析 MYSQL_BIN_LOG::ordered_commit,这个函数,核心步骤如下: Stage#1: flushing transactions to binary log: 步骤1:将事务的日志写入binlog文件的buffer中,函数如下: |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|