限制mysql表的大小

时间:2009-09-07 21:52:58

标签: mysql schema limit

是否可以限制单个mysql表的大小(磁盘大小/行数)?

如果不可能,在一台物理计算机上运行多个mysql引擎的最简单方法是什么? (我的计划是将一个mysql实例的数据文件设置为一个单独的磁盘分区。)

6 个答案:

答案 0 :(得分:1)

这与Question #1561612非常相似,只是每个架构都要强制执行。不幸的是,没有一个非常好的支持方式来做到这一点。请看那里的答案,看看他们是否也回答了你的问题。

答案 1 :(得分:1)

  1. 配额:MySQL不直接支持。您可以使用支持每用户引用的文件系统来模拟某些内容,方法是为用户设置文件所有权,并在操作系统级别设置每个用户的配额。请注意,默认情况下,InnoDB对所有数据库使用单个表文件,但有一个选项可以告诉它使用file per table。但请注意,这可能会对性能产生影响。
  2. 使用每个服务器的不同配置文件,可以在同一台计算机上运行多个实例。
  3. 在极少数情况下,您需要将用户之间的内容更改为用户:

    [mysqld]
    port=PORT_NUMBER
    datadir=/home/USER/mysql
    tmpdir=/home/USER/tmp/mysql
    

    启动服务器,运行:

    mysqld_safe --defaults-file=user_specific_my.cnf
    

    停止服务器,运行:

    mysqladmin -u root -pROOT_PASSWORD --port=3307 -h 127.0.0.1 shutdown
    

    要连接到服务器,用户应使用:

    mysql --port=USER_PORT -h 127.0.0.1 -pPASSWORD
    

答案 2 :(得分:0)

如果您有(相对)少量数据,您可以尝试使用MEMORY存储引擎创建一个表。这确实有一个可配置的size limit,但当然你受限于盒子上的可用内存量。

如果您的数据大小需要基于磁盘的表,那么限制表大小的一种直接方法是运行一个定期清除表的某些部分的作业。这可能是比使用小分区更好的选择 - 许多MySQL命令在磁盘已满时表现不佳。

此外 - 您可以根据需要在计算机上运行尽可能多的MySQL实例 - 如果您通过TCP / IP进行连接,则只需为每个实例分配不同的端口号。

答案 3 :(得分:0)

您可以使用创建压缩表的myisampack实用程序(但仅适用于MyISAM引擎)。这些表对于静态数据类型变为只读。

答案 4 :(得分:0)

如果它们是MyISAM表,玩具可以指定将存储数据和索引文件的目录。

根据用户界面:

Data Directory: ___________________ Directory where to put the tables data file
Index Directory: __________________ Directory where to put the tables index file

This works only for MyISAM tables and not on some operating systems (Windows)

所以我想这意味着如果你不在Windows主机上,你可以移动表格的文件。

答案 5 :(得分:0)

为了强制实施配额,我认为有一些不同的方法on this site可能是我遇到的最健全的方法。

要将mysql定向到不同的数据目录,请将符号链接放在linux设置中或尝试使用配置文件。 MySQL将允许您通过此处for windows setup读取的conf文件指定数据库文件的保存位置,或搜索有关my.cnf的信息

祝你好运,所以我下床睡觉了。