如何获取MySQL数据库的大小?
假设目标数据库名为“v3”。
运行此查询,您可能会得到您要查找的内容:
SELECT table_schema "DB Name",
ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"
FROM information_schema.tables
GROUP BY table_schema;
这个查询来自MySQL论坛,那里提供了更全面的指导。
可以使用以下MySQL命令来确定
SELECT table_schema AS "Database", SUM(data_length + index_length) / 1024 / 1024 AS "Size (MB)" FROM information_schema.TABLES GROUP BY table_schema
结果
Database Size (MB)
db1 11.75678253
db2 9.53125000
test 50.78547382
以 GB 为单位获取结果
SELECT table_schema AS "Database", SUM(data_length + index_length) / 1024 / 1024 / 1024 AS "Size (GB)" FROM information_schema.TABLES GROUP BY table_schema
要得到以MB为单位的结果:
SELECT
SUM(ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024), 2)) AS "SIZE IN MB"
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = "SCHEMA-NAME";
要在GB中得到结果:
SELECT
SUM(ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 / 1024), 2)) AS "SIZE IN GB"
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = "SCHEMA-NAME";
或者您可以直接跳转到数据目录,检查 v3.myd、v3.myi 和 v3.frm 文件的组合大小(对于 MyISAM),或者 v3.idb 和 v3.frm(对于 InnoDB)。
SELECT *
FROM (SELECT table_schema AS `DB Name`,
ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) AS `DB Size in MB`
FROM information_schema.tables
GROUP BY `DB Name`) AS tmp_table
ORDER BY `DB Size in MB` DESC;
mysqldiskusage --server=root:MyPassword@localhost pics
+----------+----------------+
| db_name | total |
+----------+----------------+
| pics | 1,179,131,029 |
+----------+----------------+
如果没有安装,则可以通过安装mysql-utils
软件包来进行安装,这个软件包应该被大多数主要的发行版打包。
更新
遗憾的是,他们取消了那个软件包。如果您使用的是Linux(或类似系统),
du -m /var/lib/mysql/*
该命令将列出您拥有的每个数据库的大小,以兆字节为单位。(注意事项:您可能需要root权限才能运行该命令,并且路径可能与我提供的不同。) 这会列出最大的20个:
du -m /var/lib/mysql/* | sort -nb | tail
mysql-utilities
。 - stanmysqldiskusage
需要在命令行中使用未加密的密码。使用后一定要从历史记录中删除。 - Poe Datormysql-utilities
包在 Debian 11 上已经不存在了。那么我们从哪里获取 mysqldiskusage
命令呢? - baptxdu
解决方案,但我想知道是否可以在其他地方获取mysqldiskusage
命令。 - baptx首先使用以下命令登录MySQL:
mysql -u username -p
显示单个数据库及其表的大小(以MB为单位)的命令。
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"
ORDER BY (data_length + index_length) DESC;
将database_name更改为您的数据库名称
显示所有数据库及其以MB为单位的大小的命令。
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;
进入mysql数据目录并运行du -h --max-depth=1 | grep 数据库名称
grep
,也不需要 --max-depth=1
参数。在我的情况下,使用命令 du -h databasename
的结果是相同的。 - baptx此外:如果有人想要获取单个表的大小,请使用以下代码:
SELECT
TABLE_NAME AS `Table Name`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size ( in MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "your_db_name"
AND
TABLE_NAME = "your_single_table_name"
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
ROUND()
方法时,不会显示小数部分。
FROM
和GROUP
行之间添加以下内容:where table_schema='DATABASE_NAME'
,将DATABASE_NAME
替换为你的数据库名称。 - KJ PriceDatabase Name
。 - KareemElashmawy