🎬 HoRain云小助手个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

MySQL自动删除binlog日志配置指南

一、自动删除binlog的主要配置参数

1. 通过配置文件设置(永久生效)

2. 通过SQL命令动态设置(临时生效,重启后失效)

二、自动删除触发条件

三、注意事项

1. 主从复制环境的特殊考虑

2. 避免的错误配置

3. 云数据库RDS的自动清理

四、验证配置

五、手动清理binlog(作为补充)

六、最佳实践建议


img

MySQL自动删除binlog日志配置指南

一、自动删除binlog的主要配置参数

MySQL提供两种方式来自动清理binlog日志,避免磁盘空间被大量日志文件占用:

1. 通过配置文件设置(永久生效)

在MySQL配置文件(通常是/etc/my.cnf/etc/mysql/my.cnf)的[mysqld]段中添加以下参数:

[mysqld]
# 保留7天的binlog日志(单位:天)
expire_logs_days = 7

# 或者使用更精确的时间控制(单位:秒,MySQL 5.6+引入,优先级高于expire_logs_days)
binlog_expire_logs_seconds = 604800  # 7天 = 604800秒

# 设置单个binlog文件最大大小(默认1G)
max_binlog_size = 256M

# 保留的binlog文件数量(MySQL 8.0+专属)
max_binlog_files = 30

配置后需要重启MySQL服务使参数生效:

systemctl restart mysql  # Linux系统
# 或
service mysql restart

2. 通过SQL命令动态设置(临时生效,重启后失效)

-- 设置保留7天的binlog
SET GLOBAL expire_logs_days = 7;

-- 设置保留1天的binlog(604800秒)
SET GLOBAL binlog_expire_logs_seconds = 86400;

-- 设置单个binlog文件大小为1GB
SET GLOBAL max_binlog_size = 1073741824;

二、自动删除触发条件

MySQL会根据以下情况自动清理过期的binlog文件:

  1. MySQL重启时:系统会清理过期的binlog
  2. 执行FLUSH LOGS命令时:手动刷新日志时清理过期文件
  3. binlog文件大小超过max_binlog_size:自动切换新文件时检查清理
  4. 达到设置的保留时间或文件数量限制时

三、注意事项

1. 主从复制环境的特殊考虑

  • 在主从复制环境中,必须确保expire_logs_daysbinlog_expire_logs_seconds的值大于从库的复制延迟时间
  • 如果从库延迟较大,而主库的binlog已清理,会导致从库无法同步数据

2. 避免的错误配置

  • 不要设置expire_logs_days=0:这表示"永不过期",会导致磁盘空间被耗尽
  • 不要在DTS数据传输服务期间清理binlog:会导致数据传输失败

3. 云数据库RDS的自动清理

在阿里云RDS等云数据库中,可以通过控制台设置自动清理策略:

  • 保留时长(默认3小时)
  • 最大存储空间占有率(默认30%)
  • 文件保留个数(默认60)
  • 可用存储空间(当总空间占用率>80%或剩余空间<5GB时自动清理)

四、验证配置

-- 查看当前binlog保留设置
SHOW VARIABLES LIKE 'expire_logs_days%';
SHOW VARIABLES LIKE 'binlog_expire_logs_seconds%';

-- 查看binlog文件列表
SHOW BINARY LOGS;

五、手动清理binlog(作为补充)

如果需要立即清理,可以使用以下命令:

-- 清除指定文件之前的所有binlog
PURGE MASTER LOGS TO 'mysql-bin.000358';

-- 清除指定时间点之前的binlog
PURGE MASTER LOGS BEFORE '2024-02-01 00:00:00';

-- 清除3天前的binlog
PURGE MASTER LOGS BEFORE DATE_SUB(NOW(), INTERVAL 3 DAY);

重要提醒:生产环境执行清理操作前,务必先备份数据,避免误删导致无法进行时间点恢复(PITR)。

六、最佳实践建议

  1. 推荐使用ROW格式:虽然可能产生更大的binlog文件,但与数据一致性带来的安心感相比,这点存储和网络开销是值得的。
  2. 合理设置保留时间:根据备份周期设置,如全量备份每周一次,则expire_logs_days至少应大于7天。
  3. 监控binlog大小:定期检查binlog占用空间,避免磁盘空间被耗尽。
  4. 云数据库用户:利用控制台提供的自动清理策略,无需手动配置。

通过以上配置,您可以有效管理MySQL的binlog日志,避免因日志文件过大导致的磁盘空间耗尽问题。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐