Lay*_*kes 8 mysql storage amazon-web-services amazon-rds
不久前,运行我的实例的服务器有 20GB 的 EBS 存储空间。然后它开始出现磁盘存储错误,所以我将它增加到 40GB。再说一次,存储丢失错误,所以我再次增加到 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;
Run Code Online (Sandbox Code Playgroud)
我得到以下回应...

没有什么比占用大量空间更突出的了。
如果我然后跑
select table_schema, CONCAT(ROUND( sum((data_length+index_length)/1024/1024)/1024, 2), 'G') AS MB from information_schema.tables group by 1;
Run Code Online (Sandbox Code Playgroud)
我可以看到最大的表大约有 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_priv或提供Super_priv给主用户。
我想这是磁盘空间消失的地方..然而,2064636只有大约2Mb......所以回到绘图板?
我认为丢失的可用空间驻留在InnoDB存储引擎的表空间文件中。在与 AWS 支持人员交谈后,他们建议我通过转储所有数据并导入到此新实例来设置新实例来重新创建它们,然后进行切换。在这种情况下,创建只读副本不起作用,因为只读副本在创建时使用与主实例相同的存储。
在此过程中,我必须手动设置复制。我按照此处的指南(http://www.ruemler.eu/2014/06/15/external-non-mysql-slaves-with-rds-reloaded/)并创建了一个脚本来自动执行此过程。您可以在以下位置找到它:
| 归档时间: |
|
| 查看次数: |
7040 次 |
| 最近记录: |