代码之家  ›  专栏  ›  技术社区  ›  Midhat

mysql数据文件不会收缩

  •  8
  • Midhat  · 技术社区  · 14 年前

    随着时间的推移,我的ibdata1 mysql数据库文件增长到大约32gb。最近我从我的数据库中删除了大约10gb的数据(并重新启动了mysql以获得良好的度量),但是文件不会收缩。有没有办法减小这个文件的大小

    4 回复  |  直到 10 年前
        1
  •  11
  •   Dan Soap    14 年前

    无论删除多少数据,innodb表空间的文件大小永远不会自动减小。

    您可以做的是通过设置

    innodb_file_per_table
    

    其中最长的部分是,您需要从mysql服务器导出所有数据(设置一个新服务器会更容易),然后重新导入数据。与一个单独的ibdata1文件保存每个表的数据不同,您将发现许多名为 tablename.ibd 只保存一个表的数据。


    之后:

    当您从表中删除大量数据时,可以让mysql通过发出

    alter table <tablename> engine=myisam;
    

    切换到myisam(并删除此表的innodb数据文件),然后

    alter table <tablename> engine=innodb;
    

    重新创建表。

        2
  •  4
  •   Quassnoi    14 年前

    除非你设置 innodb_file_per_table , ibdata1 拥有一切 InnoDB 表加撤消。

    这个文件从不缩小。

    要缩小范围,您应该(自行承担风险):

    • 备份和删除 全部的 诺伊德 表中 全部的 数据库
    • 手动删除文件
    • 重新初始化 诺伊德 存储(通过重新启动 mysqld )
    • 从备份还原表。

    如果你设置 innodb_file_per_表 ,您仍然需要执行此操作来回收空间,但在这种情况下,您可以按表执行此操作,而不会影响其他表。

    请注意,撤消操作仍保留在 ibdata ,甚至 innodb_file_per_表 集合。

        4
  •  1
  •   l0pan    10 年前

    optimize table your_db.your_table; SQL请求 或使用 mysql workbench migration wizard 它将创建缩小大小的数据库副本