惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
J
Java Code Geeks
H
Help Net Security
Google DeepMind News
Google DeepMind News
博客园 - 司徒正美
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
Stack Overflow Blog
Stack Overflow Blog
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
U
Unit 42
博客园 - 三生石上(FineUI控件)
Last Week in AI
Last Week in AI
M
MIT News - Artificial intelligence
WordPress大学
WordPress大学
小众软件
小众软件
博客园 - 叶小钗
D
Docker
量子位
P
Proofpoint News Feed
博客园_首页
T
Tailwind CSS Blog
F
Fortinet All Blogs

祈雨的笔记

安全多方计算MPC spark原理解析 kueue执行源码分析 spark on k8s执行源码分析 spark-operator源码解析 系统压测遇到的缓存击穿问题 我的世界PC与安卓联机 蚂蚁金服流量投放平台的AIG改造 G1大对象致Old区占用率高 日志打印导致接口响应率下跌分析 Groovy加载类导致OOM分析 ERROR日志打印导致CPU满载 记OceanBase死锁超时 应用发版期间服务响应超时 Ark Serverless初探 系统优化复盘一二三 The user specified as a definer does not exist Kong网关初探 API网关选型调研 CPU火焰图常用工具 配置中心选型调研 root操作Nginx导致用户组错误 基于Proxifier使用代理 FastJSON字段智能匹配踩坑 Nacos初探 记一次Nginx服务器CPU满荷载故障 基于券系统分库分表的思考 limit不参与SQL成本计算致索引失效 Linux常用性能监控命令 golang低版本http2偶现400
mysql磁盘占用查看
祈雨的笔记 · 2020-06-01 · via 祈雨的笔记

磁盘占用分析

在没有权限查看mysql所在磁盘时,当监控发现磁盘空间不足时,如何通过mysql的命令查看当前mysql实例的磁盘占用情况。

binlog

mysql默认不清理binlog日志,当运行一段时间后可能会累计大量的binlog文件。

通过如下命令查看当前binlog占用情况,文件大小单位为字节:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 1549 |
| mysql-bin.000002 | 905 |
| mysql-bin.000003 | 1280 |
| mysql-bin.000004 | 2442 |
| mysql-bin.000005 | 5458 |
| mysql-bin.000006 | 233 |
| mysql-bin.000007 | 4492 |
| mysql-bin.000008 | 925667205 |
| mysql-bin.000009 | 25178685 |
+------------------+-----------+
1
2
3
4
5
6
-- 删除指定日志序号之前的所有二进制日志
PURGE MASTER LOGS TO 'mysql-bin.000003';
-- 删除指定绝对日期之前的所有二进制日志
PURGE MASTER LOGS BEFORE '2020-05-01 00:00:00';
-- 删除指定相对日期之前的所有二进制日志
PURGE MASTER LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);

用户除了可以通过手动删除的方式清除binlog,也可以通过自动过期的方式由mysql自动删除binlog。过期时间由参数expire_logs_days决定,值为0时代表binlog永不过期。

1
2
3
4
5
6
mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 0 |
+------------------+-------+
1
2
-- 设置binlog7天后自动清理
mysql> set global expire_logs_days=7;

数据文件

查看各个表的数据文件大小使用如下命令:

1
2
3
4
5
6
7
8
-- 查询共享表空间ibdata1,业务表相关个文件大小(不包含redo)
SELECT file_name, concat(TOTAL_EXTENTS,'M') as 'File_size' FROM INFORMATION_SCHEMA.FILES order by TOTAL_EXTENTS DESC;

-- 查询不包含redo类日志的其他文件总大小
SELECT sum(concat(TOTAL_EXTENTS,'M')) as 'File_size' FROM INFORMATION_SCHEMA.FILES;

-- 看是否慢日志比较多,也会占用磁盘
select count(*) from mysql.slow_log;

事实上不建议只通过例如Navicat之类的软件直接查看表的数据大小,因为数据大小经常与实际有出入,如下,通过Navicat查看当前表占用120G的磁盘空间,但通过阿里云控制台查看显示占用了96G的磁盘空间,而事实上通过mysql的文件统计,该表真正占用了150G的磁盘空间。

image

image

image