数据库|不知道Binlog怎么自动清理?手把手教会你→
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
本期摘要主要探讨了Drainer产生的Binlog文件的保留问题,及其清理机制的详细分析。作者是神州数码云基地钛合金团队的一位匿名数据库运维工程师。
01学习背景
在使用Drainer时,作者注意到Binlog文件没有自动清理机制,需要手动删除。发现MySQL通过expire_logs_days参数控制Binlog清理,而Drainer则通过syncer.to.retention-time配置参数实现自动清理。但设置后发现Binlog没有按预期清理,引发了对Drainer Binlog清理过程的深入研究。
02Binlog 自动清理机制源码工作过程
Drainer维护了一个自动清理Binlog的机制,核心函数为GCByTime。该函数位于tidb-Binlog 4.0.13版本的./pkg/binlogfile/binlogger.go文件中。函数工作原理是:通过ReadBinlogNames函数获取所有Binlog文件名,排除最新文件后,对比文件修改时间和设置的保留时间,超出保留时间的文件将被删除。
03如何设置Drainer Binlog的自动清理机制
Drainer通过syncer.to.retention-time配置项启用Binlog自动清理,该参数定义在Drainer配置文件中,示例为“drainer: syncer.to.retention-time: 4”。该值需为整数,表示保留天数,会被转换为对应的Duration值用于清理逻辑。
04什么时候会触发Drainer Binlog的清理机制
Drainer的Binlog清理机制并非实时,而是通过定时任务触发。在drainer/sync/pb.go文件中,通过time.NewTicker()方法设置定时器,定期执行Binlog清理函数GCByTime。
想要了解更多内容?