我需要回收一些磁盘空间,所以我从我的服务器上删除了旧的Magento数据库。 数据库大小约为16 GB。 我很惊讶,一旦数据库被删除,它并没有真正释放该磁盘空间。
我试过重新启动MySQL服务器,但仍然占用这个空间。
如果重要的话,一个Magento数据库使用innoDB相当厉害。
有什么我可以做得到这个磁盘空间回来?
我在StackOverflow中为InnoDB写了一个CleanUp过程
https://stackoverflow.com/a/4056261/491757(2010年 10月29日)
这里是
要一劳永逸地收缩ibdata1,您必须执行以下操作:
1)将所有数据库转储到一个SQL文本文件(称为SQLData.sql)
2)删除所有数据库(mysql模式除外)
3)closuresmysql
4)将以下行添加到/etc/my.cnf
[mysqld] innodb_file_per_table innodb_flush_method=O_DIRECT innodb_log_file_size=1G innodb_buffer_pool_size=4G
旁注:不pipe你为innodb_buffer_pool_size设置了什么,确保innodb_log_file_size是innodb_buffer_pool_size的25%。
5)删除ibdata1,ib_logfile0和ib_logfile1
此时,只应在/ var / lib / mysql中有mysql模式
6)重新启动MySQL
这将以10MB重新创buildibdata1,ib_logfile0和ib_logfile1每个1G
7)将SQLData.sql重新加载到MySQL中
ibdata1将会增长,但只包含表元数据
每个InnoDB表将在ibdata1外部存在
假设你有一个名为mydb.mytable的InnoDB表。 如果你进入/ var / lib / mysql / mydb,你会看到两个表示表的文件
ibdata1将永远不会包含InnoDB数据和索引。
使用/etc/my.cnf中的innodb_file_per_table选项,可以运行OPTIMIZE TABLE mydb.mytable,文件/var/lib/mysql/mydb/mytable.ibd将实际缩小。
在我的职业生涯中,我曾经多次做过MySQL DBA
事实上,我第一次这样做,我把一个50GB的ibdata1文件压缩成了500MB。
试一试。 如果您还有其他问题,请给我发电子邮件。 相信我。 这将在短期内和长期的工作。 !
目前,回收丢失的InnoDB数据库使用的空间的唯一方法是转储所有数据库,停止MySQL,删除底层存储文件,重新启动MySQL,最后导入数据库转储。
MySQL文档有关于此的更多信息 。