定位是否MySQL存储过大
查询当前文件夹大小
du -sh
查询第一层文件夹大小
du -h -d 1
查询 data 目录下文件夹大小并排序
du -sh /data/* | sort -h
处理binlog大小
查看目前存储策略
查询日志保存天数
- mysql 8.0 以下
show variables like 'expire_logs_days';
- 0: 表示永不清理
- 30:表示只保留最近30天
- mysql8.0以上
show variables like 'binlog_expire_logs_seconds';
查询当前 binlog 日志
show binary logs;
设置binlog 保存时间
查看mysql 版本
select version();
mysql8.0以下版本查看当前数据库日志binlog保存时效 以天为单位,默认0 永不过期,最多只能设置99天
set global expire_logs_days=60;
mysql8.0以上版本通过设置全局参数 binlog_expire_logs_seconds 修改 binlog 保存时间,以秒为单位;
- 2592000 30天
- 86400 1天
- 259200 3天
- 14400 4小时
set global binlog_expire_logs_seconds=259200;
此时不会马上删除存储,需要触发过期日志清除操作
flush logs;
已删除过期日志,保留了三天
删除从库日志
从库有大量的 relay 日志,格式如:/mysql-relay-bin.000671
使用上述的方式删除没有效果
解决办法:重启复制进程
SHOW MASTER STATUS;
STOP SLAVE;
RESET SLAVE;
START SLAVE;
大功告成
永久解决
过了若干天后,发现硬盘容量又涨了,猜测是命令只有当前有效
解决办法,修改 my.cnf 文件,添加属性 binlog_expire_logs_seconds,重启后生效
[mysqld]
...
binlog_expire_logs_seconds=259200
...