我维护一个 MySQL 服务器。有一个用户的数据库大小迅速增长。由于他使用的是 InnoDB,/data/mysql/ibdata1 文件已超出比例。我可以安装一个小分区并将他的数据库放在那里,但 ibdata1 文件似乎在所有数据库中共享。
我关心的是如何限制特定用户使用超出其定义的数据库空间。
答案1
目前还没有现成的解决方案。但您可以执行以下操作:
- 获取用户拥有的表的
data_length
和(这是数据文件在文件系统中使用的空间量)index_length
show table status
- 将所有数据库的这些数字相加
- 如果达到限制,则删除该用户的 INSERT 权限,这样他就不能再插入新数据。
但请记住,从 InnoDB 表中删除数据不会释放文件系统中的空间。因此,如果您的用户达到了限制,他将无法采取任何措施。(除非转储所有 InnoDB 表,删除它们并重新导入它们)