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
此时发现磁盘已经释放了大多数了