###一、问题来源
这是一位朋友的问题,因为前期朋友设置max_binlog_cache_size为8m,后面在线进行了修改了本参数,但是结果导致整个3节点的MGR集群除了primary节点其他两个second节点均掉线。大概的日志如下:
![image.png](https://upload-images.jianshu.io/upload_images/7398834-bcc9282950415b6d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
###二、使用binlog cache的大概流程
这也是我以前写过的一个过程。
- 开启读写事务。
- 执行‘DML’语句,在‘DML’语句第一次执行的时候会分配内存空间给binlog cache缓冲区。
- 执行‘DML’语句期间生成的Event不断写入到binlog cache缓冲区。
- 如果binlog cache缓冲区已经写满了,则将binlog cache缓冲区的数据写入到binlog cache临时文件,同时清空binlog cache缓冲区,这个临时文件名以ML开头。
- 事务提交,binlog cache缓冲区和binlog cache临时文件数据全部写入到binary log中进行固化,释放binlog cache缓冲区和binlog cache临时文件。但是注意此时binlog cache缓冲区的内存空间留用供下次事务使用,但是binlog cache临时文件被截断为0,保留文件描述符。其实也就是IO\_CACHE结构保留,并且保留IO\_CACHE中分配的内存空间和临时文件文件描述符。
- 断开连接,这个过程会释放IO\_CACHE同时释放其持有的binlog cache缓冲区内存以及持有的b