ChatGPT解决这个技术问题 Extra ChatGPT

如何获取mysql数据库的大小?

如何获取mysql数据库的大小?假设目标数据库称为“v3”。

对于特定表/特定数据库大小,此处提供的脚本将有所帮助,信息是从 information_schema.tables 表中计算出来的,请参阅此处的详细答案rathishkumar.in/2017/12/…

r
rationalboss

运行这个查询,你可能会得到你要找的东西:

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; 

此查询来自 the mysql forums,其中提供了更全面的说明。


即使我从数据库中的表中删除了大部分数据,大小仍然保持不变
@Vidz 你在使用 InnoDB 引擎吗?如果这样做,您可以释放空间,除非您使用 file_per_table 和 alter tables。
请记住,此方法不会返回任何完全为空的数据库,至少必须存在一个表才能使数据库出现在结果中。
要从单个数据库中进行选择,请在 FROMGROUP 行之间添加:where table_schema='DATABASE_NAME' - 将 DATABASE_NAME 替换为您的数据库。
注意:MySQL Workbench 会吐出 Syntax error: {column title} (double quoted text) is not valid input here. 错误。列标题应包含在刻度线中。即Database Name
N
Nadeem0035

可以使用以下 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

更好的性能:SELECT table_schema AS "Database", (SUM(data_length)+SUM(index_length)) / 1024 / 1024 / 1024 AS "Size (GB)" FROM information_schema.TABLES GROUP BY table_schema
S
Sumon Sarker

或者,如果您使用 phpMyAdmin,您可以查看数据库 structure 选项卡页脚中的表大小总和。实际的数据库大小可能略高于这个大小,但它似乎与上面提到的 table_schema 方法一致。

截屏 :

https://i.stack.imgur.com/Do40K.png


佚名

或者,您可以直接跳转到数据目录并检查 v3.myd、v3 的组合大小。 myi 和 v3。 frm 文件(用于 myisam)或 v3.idb 和 v3.frm(用于 innodb)。


注意:ibd 文件仅在使用 innodb_file_per_table 时存在
这个答案非常特定于存储引擎。 @brian-willis 的回答更合适。
如果您没有访问权限(使用云服务),这将不起作用,例如,您正在使用 AWS RDS ...
G
GreenRaccoon23

要获得以 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";

E
Evan Carroll
mysqldiskusage  --server=root:MyPassword@localhost  pics

+----------+----------------+
| db_name  |         total  |
+----------+----------------+
| pics     | 1,179,131,029  |
+----------+----------------+

如果未安装,则可以通过安装 mysql-utils 软件包来安装,该软件包应由大多数主要发行版打包。


在 Debian 10 上,此软件包称为 mysql-utilities
@angristan - 谢谢。我认为甲骨文正在扔包。在大多数情况下,即使是实用程序的旧副本也很有用。
注意:mysqldiskusage 要求在命令行中使用未加密的密码。确保在使用后将其从历史记录中删除。
在某些 shell 中,在命令前面放置一个空格可以避免将该行保存在“历史记录”中。
H
Hiren Parghi

首次登录 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;

J
Jörg Asmussen

如果要对所有数据库大小的列表进行排序,可以使用:

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; 

b
baikho

进入 mysql 数据目录并运行 du -h --max-depth=1 | grep databasename


好的。但对于 RDS、GCP 等云数据库服务器,我们无权访问服务器文件系统。
文件大小不反映真实的数据库大小。事实上,从表中删除条目后,文件并没有缩小;相反,它包含引擎将在下一次重用的未分配空间。
W
Wasid Hossain

另外:如果有人想获得单个表的大小,请使用以下代码:

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() 方法的分数。

希望这对我们中的许多人有所帮助。


嗨,问题是关于如何计算数据库的整体大小,而不是单个表。请编辑您的答案以达到该结果,或解释您的答案比接受的答案更多。干杯