关于linux 磁盘占用排查问题

发布时间:2023年12月18日

1.关于磁盘

查看整体磁盘占用大小
df -h  

在这里插入图片描述

2. 先排除mysql 数据大小

查询库的大小

SELECT table_schema AS "Database",
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)"
FROM information_schema.TABLES
GROUP BY table_schema;

查询表的大小

SELECT table_name AS "Table",
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)"
FROM information_schema.TABLES
WHERE table_schema = "<database_name>";

将 <database_name> 替换为您感兴趣的特定数据库名

3.排除容器和docker 镜像大小

docker ps -a --size

docker images -a

4.查询最大的磁盘大小

如我上图所示,我这边查询前10

sudo du -hs /var/lib/docker/overlay2/* | sort -hr | head -n 10

然后这根据这个查到定位到容器

grep -r "00737c105dbeb49cbe25e4f3bcf14c8e6738ecf515026da89e3907e2749bfa83" /var/lib/docker/image/

如图所示,标记红色的框为容器ID,定位该容器是什么,排查问题
在这里插入图片描述
最后,查看该容器ID,是具体哪个容器,查看磁盘挂载情况,也可以进容器看下,是不是没有挂载的磁盘泄露了,例如我这里是图片本地图片忘记挂载了,里面占用了几十个GB磁盘大小

docker inspect [容器ID]
docker exec -it 0c40b0f51eacbd8fc97b12b2bd83b25394a5698349b9201040babd7fe3148f5d /bin/sh

5.可以查找大于100MB的文件,快速定位问题

sudo find / -type f -size +100M -exec ls -lh {} \;

例如我上面发现mysql-binlog 日志有点大
我根据时间倒序排列查询

sudo ls -lht /var/lib/mysql

只保留最近10天 bin-log删掉以前的,这个bin-log 特别占用磁盘,安全删除方式
登录msyql

mysql -uroot -p

在 MySQL 里删除旧的 binlog 文件:

使用 PURGE BINARY LOGS 命令删除旧的 binlog 文件。例如,如果您想删除 mysql-bin.000011 及之前的所有文件,运行:

PURGE BINARY LOGS TO 'mysql-bin.000012';

或者,您可以按日期删除:

PURGE BINARY LOGS BEFORE '2023-09-01 00:00:00';

6.mysql bin log 只保留最近10天数据

配置 vim /etc/my.cnf
在 [mysqld] 任意位置添加过期时间

expire_logs_days = 10

查看服务

sudo systemctl list-units --type=service

找到该服务重启

  sudo systemctl restart mysqld
  sudo systemctl status mysqld

此时发现磁盘已经释放了大多数了

文章来源:https://blog.csdn.net/qq_36517296/article/details/135020151
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。