MySQL 本身没有这样的配额,但可以在引擎级别部分管理配额限制。
对于 MyISAM,可以使用选项 myisam_data_pointer_size 限制表大小此变量限制默认数据指针大小:此变量越少,表中允许保存的行就越少。
如果考虑此选项,将报告“表已满”错误。
对于 InnoDB,可以指定共享表空间的硬限制:语法类似于“innodb_data_file_path=ibdata1:5000M;ibdata2:5000M”而不是“innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend”。
但是,无法使用此方法为每个数据库设置单个表空间文件。
基于对表行的计数,可以有一些变通方法来对 InnoDB 表空间实施一些配额检查(每个表使用一个文件):
或者基于从 Information Schema 检索到的表中的数据量:
SELECT 'Sum_index_length' as '', IFNULL(SUM(INDEX_LENGTH),0) from information_schema.TABLES where ENGINE='InnoDB'; SELECT 'Sum_data_length' as '', IFNULL(SUM(DATA_LENGTH),0) from information_schema.TABLES where ENGINE='InnoDB';
或者也基于物理表空间文件:
SELECT FILE_SIZE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE ...
也可以设置操作系统级别的任务(例如定期检查 MySQL 数据目录大小的 cron 任务),当可用空间小于确定的阈值时会提醒。
日期:2020-09-17 00:11:42 来源:oir作者:oir