我有一张桌子叫path
. 它占用了大约 99% 的 13G ibdata1。它以前是一张INNODB
桌子,但我将其转换为MYISAM
.
如果我在新表上运行优化表path
,它会释放我的 ibdata1 文件吗?或者这是否永远不会减小大小,我需要删除它并重新导入一个新的数据库?
不会。删除 InnoDB 表将释放InnoDB 表空间(文件)中ibdata1
的空间,但不会缩小ibdata1
文件。
例外的是,如果表是在innodb_file_per_table
设置服务器变量时创建的,那么该表将在自己单独的 InnoDB 表空间(数据文件)中,并且当删除该表时,该表使用的空间将被释放。
见:14.3.3。使用每表表空间 http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html
答案是否定的(上面有更好的解释)。我必须做的是:
1) Dump the database
2) Stop mysql
3) Delete the `ibdata1` file and two log files.
4) Restart mysql
5) Import the sql dump.
这将使您恢复到默认ibdata1
文件大小。然后,您可以 1)如果表上没有完整性约束(这是我所做的),则将表的引擎更改为 myisam,或者 2)innodb_file_per_table=ON
如果保留 innodb 表,则可以设置。