MySQL自动生成大量dump文件占用内部存储空间的解决方案咨询
MySQL自动生成大量dump文件占用存储空间的解决办法
第一步:先定位dump文件类型
进入MySQL日志/文件存储目录后执行以下命令识别文件来源:ls -lh *.dump *.core *.sql
常见的dump文件分为三类:
core.xxx格式:系统触发的MySQL进程崩溃核心转储文件mysqld_xxx/innodb_xxx前缀的dump文件:MySQL自身生成的诊断类转储文件- 带时间戳的
.sql/.dump文件:定时任务触发的mysqldump备份文件
第二步:对应不同场景的解决方案
场景1:进程崩溃生成的core dump文件
- 临时关闭core dump生成:执行
ulimit -c 0,即刻停止新的core文件生成 - 永久关闭:修改
/etc/security/limits.conf,新增以下两行配置后重启服务器:
同时检查MySQL配置文件* soft core 0 * hard core 0my.cnf/my.ini,注释掉core-file配置项,重启MySQL生效 - 根因修复:查看MySQL错误日志中对应dump生成时间的报错,排查是资源不足、SQL触发异常还是版本bug导致的崩溃,修复后即可停止异常dump生成
场景2:自动备份任务生成的未轮转备份文件
- 执行
crontab -l检查系统定时任务,定位自动执行mysqldump的备份脚本 - 在备份脚本中新增过期清理逻辑,例如仅保留最近7天的备份文件,新增命令如下(替换为你的实际备份路径和文件后缀):
find /data/mysql/backup -name "*.sql" -mtime +7 -delete
场景3:MySQL诊断参数开启生成的诊断dump
- 检查MySQL配置文件,确认是否开启了非必要的诊断参数,包括
innodb_status_output、innodb_status_output_locks、general_log等,不需要的情况下直接注释对应配置,重启MySQL即可停止生成。
临时空间清理方案
已生成的历史dump文件如果不需要用于问题排查,可直接删除释放空间:
- 确认文件未被占用的情况下执行
rm -f 目标文件路径即可 - 如果文件正被进程占用无法释放空间,可执行
> 目标文件路径清空文件内容快速释放空间
内容的提问来源于stack exchange,提问作者HAJJAJI Zakaria
相关产品推荐
相关产品推荐

