我们时常在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