百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> mysql 清除relay-log文件方法详解
分享文章到:

mysql 清除relay-log文件方法详解

发布时间:01/15 来源: 浏览: 关键词:
本文章来给大家介绍在mysql 清除relay-log文件与relay-log无法清除的解决办法,这里同时还介绍了系统自动定时清除relay-log文件哦。


今天在本机的mysql数据目录下发现了许多类似hostname-relay-bin.0000*的文件,该文件一般是在mysql slave实例上存在。主要用途是记录主从同步的信息,正常情况下会自动删除的。

本机未配置过master、slave,对于其来源还真不太清楚。既然是用在slave上的,那就可以放心的删除。删除master实例上的日志文件用reset master,对于slave实例就使用命令:

 代码如下

reset slave


Relay Log无法自动删除的问题

综合分析后发现和以下原因有关。


•该实例原先是一个Slave   -------导致relay-log 和 relay-log.index的存在
•该实例目前已经不是Slave  -------由于没有了IO-Thread,导致relay-log-purge 没有起作用( 这也是其他Slave实例没有这种情况的原因,因为IO-thread会做自动rotate操作)。
•该实例每天会进行日常备份  -------Flush logs的存在,导致每天会生成一个relay-log
•该实例没有配置expire-logs-days ------导致flush logs时,也不会做relay-log清除

简而言之就是: 一个实例如果之前是Slave,而之后停用了(stop slave),且没有配置expire-logs-days的情况下,会出现relay-log堆积的情况。
 

顺带也和大家分享下MySQL 内部Logrotate的机制

Binary Log rotate机制:

•Rotate:每一条binary log写入完成后,都会判断当前文件是否超过 max_binlog_size,如果超过则自动生成一个binlog file
•Delete:expire-logs-days 只在 实例启动时 和 flush logs 时判断,如果文件访问时间早于设定值,则purge file
 

Relay Log rotate 机制:

•Rotate:每从Master fetch一个events后,判断当前文件是否超过 max_relay_log_size 如果超过则自动生成一个新的relay-log-file
•Delete:purge-relay-log 在SQL Thread每执行完一个events时判断,如果该relay-log 已经不再需要则自动删除
•Delete:expire-logs-days 只在 实例启动时 和 flush logs 时判断,如果文件访问时间早于设定值,则purge file  (同Binlog file)  (updated: expire-logs-days和relaylog的purge没有关系)

PS: 因此还是建议配置 expire-logs-days , 否则当我们的外部脚本因意外而停止时,还能有一层保障。

因此建议当slave不再使用时,通过reset slave来取消relaylog

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有7人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板