有3种情况.
>如果您使用的是MyISAM,最简单的方法是查看文件系统并使用du -sh / var / lib / mysql / database.
>如果你使用设置为innodb_file_per_table的InnoDB,那么你可以使用du -sh获得一个近似的答案.它是近似的,因为ibdata1文件中仍然存储了一些数据,所以你会有点偏低.此技术也适用于混合的MyISAM / InnoDB(innodb_file_per_table)数据库.
>如果您在没有设置innodb_file_per_table的情况下使用InnoDB,那么您需要查看INFORMATION_SCHEMA.
在上述任何一种情况下,您都可以运行以下查询来获取您要查找的信息.
mysql> select table_schema, sum((data_length+index_length)/1024/1024) AS MB from information_schema.tables group by 1;
+--------------------+-----------------+
| table_schema | MB |
+--------------------+-----------------+
| prod | 298025.72448921 |
| information_schema | 0.00781248 |
| maatkit | 70.77330779 |
| mysql | 0.66873168 |
| test | 4752.31449127 |
+--------------------+-----------------+
5 rows in set (0.01 sec)
如果您有非常多的表,那么它可能很慢,正如您已经发现的那样.