如何限制单个MySQL数据库的存储大小

3
我希望能够限制每个MySQL数据库的存储大小(例如每个数据库2GB)。这可以实现吗?我找不到特定的MySQL配置来实现这一点。
具体而言,我希望在AWS RDS实例上实现这一点 - 因此与此相关的任何知识都将有所帮助。
如果您能提供任何帮助或指导,将不胜感激。

有趣的问题。我找到了这个链接,显示出一些希望,但我没有测试过:https://www.howtoforge.com/community/threads/limit-mysql-database-size.1944/ ... 我发现所有其他文档都说大小限制基于主机计算机/服务器上的文件大小限制,所以我想你可以通过对主机进行分区并将分配的磁盘空间限制在每个分区中来理论上实现所需的结果。(不要问我如何做到的,因为我已经太久没做了;这只是一个潜在的方法)。 - SeanW333
1个回答

3
这个问题在近10年前就被提出:MySQL schema size。虽然这个问题已经存在了很长时间,但我不会将其关闭为重复问题。
至今为止,没有选项可以让MySQL限制每个数据库的大小。但如果你设置innodb_file_per_table=0,则可以为系统表空间设置最大限制,所有表和模式都将填满此空间。你可以通过以下方式在my.cnf中配置最大容量:
innodb_data_file_path=ibdata1:12M:autoextend:max:1G

这只是一个例子,它表示ibdata1文件最初创建为12MB,根据需要增长,但不会超过1GB。有关更多信息,请参见https://dev.mysql.com/doc/refman/8.0/en/innodb-init-startup-configuration.html

即使系统表空间存在潜在限制,这也无法控制每个模式可以使用多少空间。它们都使用相同的表空间。

如果使用innodb_file_per_table=1,则每个表存储在自己的表空间文件中。没有选项来定义特定表空间的大小。

自MySQL 5.7以来,您还可以创建通用表空间,并将多个表分配给它。例如,您可以选择将特定模式的所有表放入一个通用表空间中。但这也没有语法来定义通用表空间的大小限制。

我在网络上看到一些解决方案,如果模式超过其大小限制,则撤销对其插入/更新权限。但这不是由MySQL强制执行的,这是外部解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接