Amazon RDS实例缓慢丢失免费的磁盘空间

一段时间后运行我的实例的服务器有20GB的EBS存储。 然后,它开始出现磁盘存储错误,所以我把它增加到了40GB。 然后再次,存储缺less错误,所以我再次增加到60GB。 (所以这是一个60GB的RDS实例)

您可以在这里看到免费存储空间(MB)图表。 每次它射击我增加更多的存储空间..

在这里输入图像说明

如果我运行这个查询..

SELECT CONCAT(table_schema, '.', table_name), CONCAT(ROUND(table_rows / 1000000, 2), 'M') rows, CONCAT(ROUND(data_length / ( 1024 * 1024 * 1024 ), 2), 'G') DATA, CONCAT(ROUND(index_length / ( 1024 * 1024 * 1024 ), 2), 'G') idx, CONCAT(ROUND(( data_length + index_length ) / ( 1024 * 1024 * 1024 ), 2), 'G') total_size, ROUND(index_length / data_length, 2) idxfrac FROM information_schema.TABLES ORDER BY data_length + index_length DESC LIMIT 10; 

我得到以下回应…

在这里输入图像说明

没有什么东西占据了巨大的空间。

如果我然后运行

 select table_schema, CONCAT(ROUND( sum((data_length+index_length)/1024/1024)/1024, 2), 'G') AS MB from information_schema.tables group by 1; 

我可以看到最大的桌子大约有10GB。 (这包括data_length和index_length)

在这里输入图像说明

我的下一个想法是,缓慢的低存储是general_log或慢查询日志写入磁盘…

如果我检查我的RDS实例上的参数组,我可以看到日志被禁用。

在这里输入图像说明

有没有人有任何想法,为什么我的RDS服务器缓慢泄漏存储?


更新:

我在#mysql上得到了一些帮助

运行后

show global variables like 'log_bin';

很明显,二进制日志已启用。

我然后跑了

show binary logs并有41674 +日志。

向下滚动我的日志我可以看到一个文件大小是2064636

在这里输入图像说明

然后我试图删除所有的二进制日志到该更新日志文件。

purge binary logs to "mysql-bin-changelog.152193"

但是,RDS不向主用户提供File_privSuper_priv

我想这是磁盘空间已经去了的地方..但是,2064636只有2Mb左右…所以回到绘图板?

我认为丢失的可用空间驻留在InnoDB存储引擎的表空间文件中。 在与AWS支持人员交谈之后,他们build议我通过转储所有数据并导入到这个新实例来build立一个新实例来重新创build它们,然后切换。 在这种情况下创build只读副本不起作用,因为只读副本在创build时与主实例使用相同的存储。

在这个过程中,我不得不手动设置复制。 我遵循这里的指南( http://www.ruempler.eu/2014/06/15/external-non-mysql-slaves-with-rds-reloaded/ )并创build了一个脚本来自动化这个过程。 你可以在以下地址find它:

https://github.com/cenk/darbe

您可以在MySQL下面的命令中检查您的二进制日志保留期:

 mysql> call mysql.rds_show_configuration; 

要将保留期限设置为1天,请使用以下命令:

 mysql> call mysql.rds_set_configuration('binlog retention hours', 24); 

这意味着MySQL服务将每天清除二进制日志。

此外,二进制日志,我认为你可以检查innodb_file_per_table的设置,所有的数据将被存储到ibdata文件,如果它被分配为“0”。

我build议你将选项分配给“1”,这样你的表格将被分开存储,你可以通过以下方式回收你的已用空间:

 mysql> OPTIMIZE TABLE <table_name> 

检查下面的参考链接,看看它们是否反映了你的问题:
当innodb_file_per_table为ON时,如何回收InnoDB中的空间

为什么ibdata1文件在MySQL中不断增长?

还有一件事,根据网站,你将有快速增长的ibdata1文件,因为你有很长时间的运行事务。 尽量提交它们以避免执行系统还原来回收空间。