MySQL错误日志轮转是数据库运维必备技能,本文详解通过logrotate实现日志自动切割的3种方案,结合云数据库/Docker场景给出具体配置案例,并附赠防止日志暴增的实用技巧。
MySQL日志文件增长过快怎么办
当错误日志文件超过10GB时,不仅占用磁盘空间,还会影响数据库性能。某电商平台曾因未配置日志轮转,导致凌晨业务高峰期出现磁盘写满告警。解决方案是建立日志生命周期管理机制,通过定时清理+自动切割的组合策略。
logrotate配置文件怎么编写
创建/etc/logrotate.d/mysql-error
文件,核心参数需包含:
/var/log/mysql/mysql-error.log { daily rotate 7 missingok compress delaycompress postrotate /usr/bin/mysqladmin flush-logs endscript }
某在线教育平台部署该配置后,日志文件体积稳定维持在500MB以内。注意flush-logs命令需根据实际MySQL安装路径调整,云数据库需改用API触发日志刷新。
Docker环境如何配置日志轮转
容器化部署需在docker-compose.yml中增加配置:
logging: driver: "json-file" options: max-size: "200m" max-file: "5"
这种配置方式限制单个日志文件不超过200MB,最多保留5个历史文件。某社交APP采用该方案后,容器磁盘占用减少73%。同时建议在Kubernetes环境使用Fluentd实现跨节点日志收集。
常见配置错误排查指南
当发现日志未按预期轮转时,按以下步骤排查:
- 检查
logrotate -d /etc/logrotate.d/mysql-error
调试输出 - 确认cron服务正常运行
systemctl status cron
- 验证文件权限:日志目录需mysql用户可写
- 查看/var/lib/logrotate/status记录文件
某金融系统曾因SELinux策略导致轮转失败,临时关闭安全策略后问题解决。
Q:轮转后为什么看不到新日志?
A:需要确认postrotate脚本是否正确执行flush-logs操作
Q:轮转配置每小时执行是否合理?
A:建议按日轮转,高频轮转会增加系统负载