删除 Magento MySQL 数据库后回收磁盘空间

删除 Magento MySQL 数据库后回收磁盘空间

我需要回收一些磁盘空间,因此我从服务器中删除了一个旧的 Magento 数据库。该数据库大小约为 16 GB。令我惊讶的是,删除数据库后,并没有真正释放磁盘空间。

我尝试重新启动 MySQL 服务器,但它仍然占用该空间。

如果这很重要的话,Magento 数据库会大量使用 innoDB。

我能做些什么来恢复这个磁盘空间吗?

答案1

我在 StackOverflow 上为 InnoDB 编写了一个 CleanUp 程序

https://stackoverflow.com/a/4056261/491757(2010 年 10 月 29 日)

这里是

要彻底缩小 ibdata1,您必须执行以下操作:

1)MySQLDump 所有数据库到一个 SQL 文本文件中(称之为 SQLData.sql)

2)删除所有数据库(mysql 模式除外)

3)关闭mysql

4)将以下行添加到/etc/my.cnf

[mysqld]
innodb_file_per_table
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
innodb_buffer_pool_size=4G

旁注:无论您设置了 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 的 ibdata1、1G 的 ib_logfile0 和 ib_logfile1

7)将SQLData.sql重新加载到mysql中

ibdata1 将增长但仅包含表元数据

每个 InnoDB 表都将存在于 ibdata1 之外

假设你有一个名为 mydb.mytable 的 InnoDB 表。如果你进入 /var/lib/mysql/mydb,你会看到两个代表该表的文件

  • mytable.frm(存储引擎头)
  • mytable.ibd(mydb.mytable 的表数据和表索引的主页)

ibdata1 将不再包含 InnoDB 数据和索引。

使用 /etc/my.cnf 中的 innodb_file_per_table 选项,您可以运行 OPTIMIZE TABLE mydb.mytable,并且文件 /var/lib/mysql/mydb/mytable.ibd 实际上会缩小。

在我担任 MySQL DBA 的职业生涯中,我曾多次这样做

事实上,我第一次这样做时,将 50GB 的 ibdata1 文件压缩成了 500MB。

试试吧。如果您对此有进一步的问题,请给我发电子邮件。相信我。这在短期和长期都会有效。!!!

答案2

目前,回收已删除的 InnoDB 数据库使用的空间的唯一方法是转储所有数据库、停止 MySQL、删除底层存储文件、重新启动 MySQL,最后导入数据库转储。

MySQL 文档有更多信息对这个。

相关内容