我们知道binlog在语句执行的时候会记录binlog_cache_size,但是超过binlog_cache_size的会放在临时文件中,commit的时候会写入binlog文件。当然,这一段考虑当sync_binlog=1时,文档中也有描述:在一个未提交的事务中,所有改变InnoDBtables等事务性表的更新(UPDATE,DELETE,或INSERT)都会被缓存,直到收到一个COMMIT语句服务器。此时,mysqld在执行COMMIT之前将整个事务写入二进制日志。当处理事务的线程启动时,它会为bufferstatements分配一个binlog_cache_size的缓冲区。如果语句大于此,线程将打开一个临时文件来存储事务。临时文件在线程结束时删除binlog中记录的时间戳。MySQL数据库是在收到命令后执行前确定的,它的值记录在thd的start_time字段中。因此,在高并发的MySQL中,可能先提交再执行SQL,导致binlog中记录时间戳乱序https://zhuanlan.zhihu.com/p/...https://developer.aliyun.com/...
