小编Bla*_*uez的帖子

在mariadb中删除数百万条记录后如何释放硬盘空间

我们有一个应用程序,我们每隔几秒接收一次信息,我们将这些信息记录在一个称为事件的表中,该表目前重达 240 GB,这是迄今为止我们拥有的最大的。

前段时间我们删除了记录以保留特定日期的记录。不久前我们发现存储数据库的服务器正在填满磁盘,删除数百万条记录后,磁盘空间保持不变。

在网上搜索我们发现执行以下查询 ALTER TABLE tablename ENGINE = Innodb; 将释放已删除记录的已用空间。

但是我们遇到的问题是,由于我们有大于200G的表,所以该命令执行时间较长,导致新信息因阻塞而无法及时插入。

我们找到的选项如下:

  • 制作数据库的副本(主 - 从),从我们在这里看到的情况来看,我们必须对主数据库进行备份并将其传递给从数据库,以便它开始从发生的地方进行复制,为此我们有详细信息是的,我们不想关闭当前的服务器,以便我们的服务保持功能,但我们也不希望丢失任何信息。我们在前一天对服务器进行了备份,我们可以使用它,但是我们如何恢复一天内未插入的信息,如果创建了该备份,那么该备份有什么内容以及从服务器是从哪里配置的?
  • 备份我们当前的数据库并将其上传到新服务器,以免使用 ALTER TABLE tablename ENGINE = Innodb 命令,为此我们必须关闭服务器。
  • 执行 ALTER TABLE tablename ENGINE = Innodb 命令,我们执行测试,在我们作为测试的 10 GB 表中,执行了大约 25 分钟。

有没有更优化的方法来释放空间,而不必取消我们的服务并且不会丢失信息?或者如果必须在最短的时间内完成?

此查询 ALTER TABLE tablename ENGINE = Innodb 知道它是否锁定表。

生产中的环境信息: Ubuntu Ubuntu 16.04.3 LTS mysql Distribution 10.1.21-MariaDB 所有表的类型均为 Engine = Inodb

非常感谢

mysql mariadb ubuntu disk-space master-slave-replication

5
推荐指数
1
解决办法
6173
查看次数