我的服务器因为硬盘爆满挂掉了,记录一些排查硬盘占用的方法。

NCurses Disk Usage

简称 ncdu,图形化命令行工具,肥肠滴好用

官网 https://dev.yorhel.nl/ncdu

截图

screenshot_2024-03-03_21-13-51.png

安装方法从官网下载二进制文件并放到 /usr/bin 文件夹

清理 MySQL 日志文件

在处理MySQL的日志文件时,重要的是要先理解你正在处理的日志类型。MySQL主要有几种类型的日志文件,包括错误日志、查询日志、慢查询日志、二进制日志等。每种类型的日志都有其特定的处理方式。下面是一些基本的方法来清理这些日志文件:

错误日志

错误日志记录了MySQL启动、运行或停止时遇到的问题。通常,清理错误日志并不会在运行时释放磁盘空间,因为它不是循环使用的。你可以删除老的错误日志文件,但首先要确保不再需要它们来调试问题。

查询日志和慢查询日志

查询日志记录了所有MySQL服务器接收到的SQL语句。慢查询日志记录了执行时间超过指定阈值的查询。这些日志文件可以通过设置MySQL配置文件来管理。例如,你可以设置expire_logs_days参数来自动删除旧的日志文件。对于慢查询日志,可以定期手动清理旧文件。

二进制日志

二进制日志记录了所有更改数据或可能更改数据的语句,主要用于复制和数据恢复。你可以使用PURGE BINARY LOGS命令来清理旧的二进制日志文件:

1
PURGE BINARY LOGS BEFORE 'YYYY-MM-DD HH:MM:SS';

或者,如果你知道要删除的日志文件的名称:

1
PURGE BINARY LOGS TO 'mysql-bin.010';

创建定时任务

虽然 expire_logs_days 参数设置了日志文件的过期时间,MariaDB 会根据这个设置定期清理过期的日志文件。这通常发生在二进制日志文件被刷新或者服务器重启时。如果需要立即手动触发清理过程,可以使用以下命令:

1
FLUSH BINARY LOGS;

可以配置一个 cron job 来每天自动进入 MySQL 或 MariaD B数据库执行 FLUSH BINARY LOGS 命令。

  1. 创建一个 shell 脚本:touch flush_binlogs.sh
1
2
#!/bin/bash
mysql -u your_username -p'your_password' -e "FLUSH BINARY LOGS;"
  1. 保存并赋予执行权限:chmod +x flush_binlogs.sh
  2. 配置 crontab:crontab -e
1
0 1 * * * /path/to/flush_binlogs.sh

通用清理建议

  • 定期清理:根据你的业务需求,制定日志文件的清理策略,避免磁盘空间被完全占用。
  • 监控磁盘空间:使用工具监控磁盘空间的使用情况,及时发现问题。
  • 优化日志配置:根据需要优化MySQL的日志配置,例如调整慢查询日志的阈值,或者完全关闭查询日志以节省磁盘空间。
  • 使用外部工具:考虑使用外部日志管理工具或服务,帮助更有效地管理和分析日志文件。

在执行任何清理操作之前,请确保已经备份了重要的日志文件,以防万一需要它们来调试问题或恢复数据。