服务器磁盘空间突然耗尽,于是开展排查。
先使用命令,查询占用磁盘空间最大的文件夹。
du -h --max-depth=1 | sort -hr | head -n 10
-h 选项表示以易读的格式(如KB、MB、GB)显示大小。
--max-depth=1 限制du命令的递归深度为1,即只查看当前目录下的直接子目录和文件。
sort -hr 对输出进行排序,-h 表示按人类可读的数字排序,-r 表示逆序(从大到小)。
head -n 10 显示前10个最大的结果。
从根目录开始排查,逐步寻到mysql数据文件夹,原来是binlog文件过多,把磁盘空间用尽了。
手动删除binlog
可以直接删除binlog文件,但是可以通过mysql提供的工具来删除更安全,因为purge会更新mysql-bin.index中的条目,而直接删除的话,mysql-bin.index文件不会更新。
mysql-bin.index的作用是加快查找binlog文件的速度。
1、首先登录的mysql
2、查看binlog 日志文件 mysql> show binary logs;
3、删除举例:
-
清除3天前的 binlog
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);
-
删除所有binlog日志,新日志编号从头开始
RESET MASTER;
-
删除mysql-bin.010之前所有日志
PURGE MASTER LOGS TO ‘mysql-bin.010’;
-
删除2003-04-02 22:46:26之前产生的所有日志
PURGE MASTER LOGS BEFORE ‘2003-04-02 22:46:26’;
个人感觉还是最下面的好用,当执行时提示0条响应,实现是已经把3天之前的binlog文件已经删除掉了。
临时配置binlog过期
- 查看现在配置:
show variables like 'expire_logs_days';
- 用以下命令设置全局的参数:
set global expire_logs_days=30;
(数字30是保留30天的意思) - 刷一下log使上面的设置生效,否则不生效:
flush logs;
永久配置binlog过期
服务器安装的是MySQL8,编辑配置文件/etc/mysql/mysql.conf.d/mysqld.cnf,添加binlog过期时间的配置项:expire_logs_days=7,然后重启mysql服务即可。
注意:本文归作者所有,未经作者允许,不得转载