【问题标题】:How to get size of mysql database?如何获取mysql数据库的大小?
【发布时间】:2010-12-16 13:14:54
【问题描述】:

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

【问题讨论】:

  • 对于特定的表/特定的数据库大小,这里提供的脚本会有所帮助,信息是从 information_schema.tables 表中计算出来的,详细答案见这里rathishkumar.in/2017/12/…

标签: mysql database


【解决方案1】:

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

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. 错误。列标题应包含在刻度线中。 IE。 Database Name.
【解决方案2】:

可以通过下面的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

【讨论】:

  • 不错。我喜欢这个答案。
【解决方案3】:

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

屏幕截图:

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 注意:ibd文件只有在使用innodb_file_per_table时才存在
    • 这个答案是针对存储引擎的。 @brian-willis 的回答更合适。
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:
      mysqldiskusage  --server=root:MyPassword@localhost  pics
      
      +----------+----------------+
      | db_name  |         total  |
      +----------+----------------+
      | pics     | 1,179,131,029  |
      +----------+----------------+
      

      如果没有安装,可以通过安装mysql-utils 包来安装,该包应该被大多数主要发行版打包。

      【讨论】:

      • 在 Debian 10 上,这个包被称为 mysql-utilities
      • @angristan - 谢谢。我认为甲骨文正在扔包。在大多数情况下,即使是旧的实用程序副本也很有用。
      • 注意:mysqldiskusage 要求在命令行中使用未加密的密码。请务必在使用后将其从历史记录中删除。
      • 在某些 shell 中,在命令前放置一个空格可避免将行保存在“历史记录”中。
      【解决方案7】:

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

      【讨论】:

        【解决方案8】:

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

        【讨论】:

        • 好的。但对于 RDS、GCP 等云数据库服务器,我们无权访问服务器文件系统。
        【解决方案9】:

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

        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; 
        

        【讨论】:

          猜你喜欢
          • 2021-04-05
          • 2013-01-20
          • 2020-09-10
          • 2015-02-24
          • 2018-09-15
          • 2022-10-03
          相关资源
          最近更新 更多