searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

binlog过期时间单位从天精确到秒

2024-09-05 09:26:36
6
0

背景

在生产环境中,经常会遇到mysql数据库占满磁盘的情况,尤其是业务比较繁忙时,会产生大量的日志。不难发现,这些日志中,基本上都是binlog日志。mysql通过自动清理机制/手动清理机制对这些日志进行管理,在mysql5.7版本中,通过设置/修改expire_logs_days参数进行定期自动清理日志,来避免大量的binlog日志耗费存储空间,甚至占满磁盘的情况,但是由于该参数以天为单位,取值范围是0~99天,无法精确清理小时/秒级别的日志,导致无法根据业务的实际情况灵活地清理日志,仍有在业务繁忙时binlog占满磁盘空间的情况。
 
expire_logs_days:
  • 设置binlog的过期天数,过了指定天数的日志将被自动删除,可动态修改
  • 如果设置了非0值,则在mysqld启动和日志刷新时,可能执行清理超过定义天数的binlog file
  • 全局变量,动态变量,默认值为0(代表不会自动清理binlog),整型值,取值范围为0~99
 
 

需求

对于binlog过期时间的设置要适当,既要考虑到业务的繁忙情况,避免业务特别繁忙时binlog日志占满磁盘而影响业务;同时也要考虑到主从复制的延迟,避免主库binlog还未传到从库而因过期被删除,导致主从不一致。
 
为了根据需求灵活地设置binlog过期时间,通过将binlog过期时间单位精确到秒,来达到合理、高效利用实例存储空间的目的。
 
将binlog过期时间单位精确到秒带来的收益:
1、避免因binlog过多导致磁盘存储空间不足而影响业务,以及在一定程度上减少线上运维的工作
2、可以根据业务情况灵活设置过期时间,帮助用户合理利用存储空间,以节省存储资源浪费所带来的开销。
 
 

设计

通过新增参数 binlog_expire_logs_seconds来实现灵活设置binlog的过期时间
 
binlog_expire_logs_seconds:
  1. 单位为秒
  2. 设置binlog的过期时间,过了指定时间的日志将被自动删除,可动态修改,可持久化配置
  3. 如果设置了非0值,则在mysqld启动和日志刷新时,可能执行清理超过定义时间的binlog file
  4. 全局变量,动态变量,默认值为2592000,也就是30天,整型值,取值范围为0~4294967295
 
 
mysql启动时:
  • 参数文件中binlog_expire_logs_seconds和expire_logs_days都没配置的时候,mysql会使用binlog_expire_logs_seconds作为默认配置,并且默认值为2592000秒,即30天。
  • 参数文件中binlog_expire_logs_seconds和expire_logs_days有一个设置为非0值,则非0值的参数作为binlog日志的失效期。
  • 参数文件中binlog_expire_logs_seconds和expire_logs_days参数都设置为非0值,则使用binlog_expire_logs_seconds值,expire_logs_days值则失效并发出告警信息。
 
mysql运行期间:
使用了binlog_expire_logs_seconds作为binlog的过期时间,此时再动态修改expire_logs_days会发出错误,不允许同时使用binlog_expire_logs_seconds和expire_logs_days.
 
关闭自动清除binlog的功能
若要关闭自动清除binlog文件的功能则需要显示指定binlog_expire_logs_seconds=0 并且不设置expire_logs_days的值。(即 binlog_expire_logs_seconds == 0 && expire_logs_days == 0)
 
为了兼容早期版本若显示指定了expire_logs_days =0而没有指定binlog_expire_logs_seconds的值
此时自动清理binlog日志则是 禁用 的,并且此时binlog_expire_logs_seconds的默认值不适用。
0条评论
0 / 1000
yyy
6文章数
0粉丝数
yyy
6 文章 | 0 粉丝
原创

binlog过期时间单位从天精确到秒

2024-09-05 09:26:36
6
0

背景

在生产环境中,经常会遇到mysql数据库占满磁盘的情况,尤其是业务比较繁忙时,会产生大量的日志。不难发现,这些日志中,基本上都是binlog日志。mysql通过自动清理机制/手动清理机制对这些日志进行管理,在mysql5.7版本中,通过设置/修改expire_logs_days参数进行定期自动清理日志,来避免大量的binlog日志耗费存储空间,甚至占满磁盘的情况,但是由于该参数以天为单位,取值范围是0~99天,无法精确清理小时/秒级别的日志,导致无法根据业务的实际情况灵活地清理日志,仍有在业务繁忙时binlog占满磁盘空间的情况。
 
expire_logs_days:
  • 设置binlog的过期天数,过了指定天数的日志将被自动删除,可动态修改
  • 如果设置了非0值,则在mysqld启动和日志刷新时,可能执行清理超过定义天数的binlog file
  • 全局变量,动态变量,默认值为0(代表不会自动清理binlog),整型值,取值范围为0~99
 
 

需求

对于binlog过期时间的设置要适当,既要考虑到业务的繁忙情况,避免业务特别繁忙时binlog日志占满磁盘而影响业务;同时也要考虑到主从复制的延迟,避免主库binlog还未传到从库而因过期被删除,导致主从不一致。
 
为了根据需求灵活地设置binlog过期时间,通过将binlog过期时间单位精确到秒,来达到合理、高效利用实例存储空间的目的。
 
将binlog过期时间单位精确到秒带来的收益:
1、避免因binlog过多导致磁盘存储空间不足而影响业务,以及在一定程度上减少线上运维的工作
2、可以根据业务情况灵活设置过期时间,帮助用户合理利用存储空间,以节省存储资源浪费所带来的开销。
 
 

设计

通过新增参数 binlog_expire_logs_seconds来实现灵活设置binlog的过期时间
 
binlog_expire_logs_seconds:
  1. 单位为秒
  2. 设置binlog的过期时间,过了指定时间的日志将被自动删除,可动态修改,可持久化配置
  3. 如果设置了非0值,则在mysqld启动和日志刷新时,可能执行清理超过定义时间的binlog file
  4. 全局变量,动态变量,默认值为2592000,也就是30天,整型值,取值范围为0~4294967295
 
 
mysql启动时:
  • 参数文件中binlog_expire_logs_seconds和expire_logs_days都没配置的时候,mysql会使用binlog_expire_logs_seconds作为默认配置,并且默认值为2592000秒,即30天。
  • 参数文件中binlog_expire_logs_seconds和expire_logs_days有一个设置为非0值,则非0值的参数作为binlog日志的失效期。
  • 参数文件中binlog_expire_logs_seconds和expire_logs_days参数都设置为非0值,则使用binlog_expire_logs_seconds值,expire_logs_days值则失效并发出告警信息。
 
mysql运行期间:
使用了binlog_expire_logs_seconds作为binlog的过期时间,此时再动态修改expire_logs_days会发出错误,不允许同时使用binlog_expire_logs_seconds和expire_logs_days.
 
关闭自动清除binlog的功能
若要关闭自动清除binlog文件的功能则需要显示指定binlog_expire_logs_seconds=0 并且不设置expire_logs_days的值。(即 binlog_expire_logs_seconds == 0 && expire_logs_days == 0)
 
为了兼容早期版本若显示指定了expire_logs_days =0而没有指定binlog_expire_logs_seconds的值
此时自动清理binlog日志则是 禁用 的,并且此时binlog_expire_logs_seconds的默认值不适用。
文章来自个人专栏
MySQL
6 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0