代码之家  ›  专栏  ›  技术社区  ›  Magnar

限制mysql表的大小

  •  4
  • Magnar  · 技术社区  · 6 年前

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

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

    6 回复  |  直到 8 年前
        1
  •  1
  •   Community CDub    8 年前

    这与 Question #1561612 ,但每个架构都要强制执行此限制。不幸的是,目前还没有一种得到很好支持的方法来做到这一点。请看那里的答案,看他们是否也回答了你的问题。

        2
  •  1
  •   Omry Yadan    15 年前
    1. 配额:MySQL不直接支持。通过为用户设置文件所有权并在操作系统级别设置每个用户的配额,您可以使用支持每个用户报价的文件系统来模拟某些内容。注意,默认情况下innodb对所有数据库使用一个表文件,但是有一个选项告诉它使用 file per table . 不过,请注意,这可能会影响性能。
    2. 对于每台服务器,使用不同的配置文件可以在同一台计算机上运行多个实例。

    在最起码的情况下,您将希望从一个用户更改为另一个用户:

    [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
    
        3
  •  0
  •   Seth    15 年前

    如果您有(相对)少量的数据,可以尝试使用 MEMORY 存储引擎。有一个可配置的 size limit ,但您当然会受到盒子上可用内存量的限制。

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

    另外-您可以在您的计算机上运行任意数量的MySQL实例——如果您是通过TCP/IP连接的,您只需为每个实例分配一个不同的端口号。

        4
  •  0
  •   Bill the Lizard    15 年前

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

        5
  •  0
  •   Cylindric    15 年前

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

    根据用户界面:

    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主机上,你可以移动一个表的文件。

        6
  •  0
  •   Cranium Slows    15 年前

    为了实施配额,我认为有几种不同的方法 on this site 可能是我听到的最动听的声音。

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

    祝你好运,已经很晚了,所以我要去睡觉了。