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

Jos*_*ton 5 mysql innodb magento

我需要回收一些磁盘空间,所以我从我的服务器中删除了一个旧的 Magento 数据库。数据库大小约为 16 GB。我很惊讶一旦数据库被删除,它并没有真正释放磁盘空间。

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

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

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

Rol*_*DBA 8

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

/sf/answers/283938301/(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
Run Code Online (Sandbox Code Playgroud)

旁注:无论您为 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、ib_logfile0 和 ib_logfile1 分别以 1G 的速度重新创建 ibdata1

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。

试一试。如果您对此有更多疑问,请给我发电子邮件。相信我。这将在短期和长期内奏效。!!!