一. 核心步骤
-
登录MySQL命令行:
- 使用MySQL客户端登录数据库(例如:
mysql -u username -p
),确保用户有权限查询information_schema
数据库。
- 使用MySQL客户端登录数据库(例如:
-
执行SQL查询命令:
-
查询所有数据库的大小(单位:MB):
SELECT TABLE_SCHEMA AS '数据库名称', ROUND(SUM(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS '总大小_MB' FROM information_schema.TABLES GROUP BY TABLE_SCHEMA;
- 输出示例:
+-----------------+--------------+ | 数据库名称 | 总大小_MB | +-----------------+--------------+ | database1 | 1314.50 | | database2 | 520.50 | | ... | ... | +-----------------+--------------+
- 此命令计算每个数据库的数据长度(
DATA_LENGTH
)和索引长度(INDEX_LENGTH
)总和,并转换为MB(保留两位小数)。
- 输出示例:
-
额外选项:查询包含详情(数据大小、索引大小等):
SELECT TABLE_SCHEMA AS '数据库名称', ROUND(SUM(DATA_LENGTH) / 1024 / 1024, 2) AS '数据大小_MB', ROUND(SUM(INDEX_LENGTH) / 1024 / 1024, 2) AS '索引大小_MB', ROUND(SUM(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS '总大小_MB' FROM information_schema.TABLES GROUP BY TABLE_SCHEMA;
-
+--------------------+--------------+--------------+------------+
| 数据库名称 | 数据大小_MB | 索引大小_MB | 总大小_MB |
+--------------------+--------------+--------------+------------+
| alarm | 18.44 | 1.94 | 20.38 |
| app | 0.02 | 0.00 | 0.02 |
|work_order | 0.25 | 0.00 | 0.25 |
| dataroom | 4.91 | 0.00 | 4.91 |
| information_schema | 0.19 | 0.00 | 0.19 |
| mysql | 7.59 | 0.29 | 7.88 |
| passenger_flow | 502.81 | 24.78 | 527.59 |
| performance_schema | 0.00 | 0.00 | 0.00 |
| pig | 68.86 | 14.61 | 83.47 |
| pig_codegen | 0.16 | 0.03 | 0.19 |
| pig_config | 0.23 | 0.20 | 0.44 |
| pig_job | 6.80 | 0.33 | 7.13 |
| sys | 0.02 | 0.00 | 0.02 |
| __tencentdb__ | 0.17 | 0.09 | 0.27 |
+--------------------+--------------+--------------+------------+
二. 注意事项
- 性能影响:
information_schema.TABLES
表包含所有数据库的元数据。在大型实例中(如数万张表),查询可能较慢(尤其是在繁忙时段)。建议在维护窗口执行。 - 结果准确性:计算基于估计值而非实时锁表,大小可能略有偏差(如碎片未计入)。确保MySQL版本较新(如5.7+)以支持准确统计。
- 单位调整:如需GB或KB输出,修改除数(例如
/1024/1024/1024
为GB)。 - 权限要求:执行用户需拥有
SELECT
权限,否则会报错。可预先检查权限:SHOW GRANTS。