我们时常在mysql binlog过大的时候,会执行binlog的purge指令来减小binlog占用的磁盘空间,那么它的实现大概是如何实现的呢?
首先我们理一下mysql的实现模块,譬如mysql-bin.00000x的,都是binlog数据文件,存储着binlog的实体数据;还有一个是binlog的索引文件,一般名称为mysql-bin.index,存储着binlog文件列表:
./mysql-bin.000001
./mysql-bin.000002
当我们执行purge binlog指令的时候,我们假设是以purge某个文件之前的binlog文件为例,mysql按如下的流程进行处理:
purge index file,这个文件主要作用在于记录需要purge的binlog文件列表purge index file中purge index file,让其落盘mysql binlog index file中删除purge index file的部分,这里mysql做了原子处理,即先创建一个crash mysql binlog index file,其中记录着最终移除purge index file后的内容,然后将crash mysql binlog index file重命名为binlog索引文件,确保这里故障不会影响索引文件的合法性purge index file中记录的被purge的文件purge index file