关于purge master logs的一个小实验
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于purge master logs的一个小实验相关的知识,希望对你有一定的参考价值。
原理部分来自《MariaDB原理与实现》 Page109-111
purge删除binlog的过程如下:
1、检查to_log在mysql-bin.index中是否存在,避免非法的purge操作
2、创建一个purge_index_file,用于保存待删除的binlog文件名称
3、遍历index文件,将可删除的binlog添加到purge_index_file中(purge删除时候,只会把未使用到的binlog之前的文件删除掉)
4、将purge_index_file的内容写入到磁盘
5、更新mysql-bin.index文件,将待删除的binlog文件名从index文件中删除掉
6、删除所有待删除的binlog文件
7、删除purge_index_file文件
实验在主库上能否删除从库正在读取的binlog:
1、在从库上stop slave 暂停复制。
2、主库上造几个大的binlog,并多次flush logs切割下binlog。
3、在从库上start slave 开启复制。
4、在主库上执行purge master logs 操作清理掉全部的binlog(如下图):
上图中间部分,我们可以看到purge操作有一个warning。并且最终清理掉的binlog没有我们预期的效果。
下图是主库中记录的关于purge的警告信息:
可以清楚的看到:从库的IO线程正在读取文件的情况下,主库purge master 不会全部清理binlog。
以上是关于关于purge master logs的一个小实验的主要内容,如果未能解决你的问题,请参考以下文章
关于GTID模式下备份时 --set-gtid-purged=OFF 参数的实验
mysqldump --set-gtid-purged=OFF参数