【问题标题】:Limiting the size of a mysql table限制mysql表的大小
【发布时间】:2017-01-01 23:31:13
【问题描述】:

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

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

【问题讨论】:

  • 什么平台? Linux、Windows、*BSD...

标签: mysql schema limit


【解决方案1】:

这与Question #1561612 非常相似,不同之处在于每个模式都强制执行限制。不幸的是,没有真正得到很好支持的方法来做到这一点。请查看那里的答案,看看他们是否也回答了您的问题。

【讨论】:

    【解决方案2】:
    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】:

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

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

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

      【讨论】:

      • 我想要一个硬限制,以确保一个表中的溢出(例如日志记录)不会影响其他表的性能。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        如果它们是 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】:

          为了实施配额,有几种不同的方法,我认为找到on this site 的方法可能是我遇到过的最合理的方法。

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-08
            • 1970-01-01
            • 1970-01-01
            • 2013-01-12
            • 1970-01-01
            • 2019-04-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多