Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  ALTER TABLESPACE Statement

15.1.10 表空间修改语句

ALTER [UNDO] TABLESPACE tablespace_name
  NDB only:
    {ADD | DROP} DATAFILE 'file_name'
    [INITIAL_SIZE [=] size]
    [WAIT]
  InnoDB and NDB:
    [RENAME TO tablespace_name]
  InnoDB only:
    [AUTOEXTEND_SIZE [=] 'value']
    [SET {ACTIVE | INACTIVE}]
    [ENCRYPTION [=] {'Y' | 'N'}]
  InnoDB and NDB:
    [ENGINE [=] engine_name]
  Reserved for future use:
    [ENGINE_ATTRIBUTE [=] 'string']

该语句用于NDBInnoDB表空间。它可以用来添加一个数据文件到NDB表空间,或者从NDB表空间中删除一个数据文件。还可以用来重命名一个NDB集群磁盘表空间、重命名一个InnoDB通用表空间、对一个InnoDB回滚表空间进行加密或标记为活动或非活动。

使用UNDO关键字和SET {ACTIVE | INACTIVE}子句来标记一个InnoDB回滚表空间为活动或非活动。更多信息请见第17.6.3.4节,“回滚表空间”

ADD DATAFILE变体允许您使用INITIAL_SIZE子句指定一个NDB磁盘数据表空间的初始大小,where size以字节计;默认值为134217728(128 MB)。您可以在size后面跟一个一位的缩写,类似于my.cnf文件中使用的缩写。通常,这是一个字母M(兆)或G(GB)。

在32位系统上,INITIAL_SIZE的最大支持值为4294967296(4 GB)。(BUG #29186)

INITIAL_SIZE 将被明确地四舍五入,类似于CREATE TABLESPACE

创建数据文件后其大小不能被改变;然而,您可以使用多个ALTER TABLESPACE ... ADD DATAFILE语句将更多的数据文件添加到NDB表空间中。

使用ALTER TABLESPACE ... ADD DATAFILE语句时,带有ENGINE = NDB,每个集群数据节点上都会创建一个数据文件,但在信息架构FILES表中只生成一行记录。请查看该表的描述,以及第25.6.11.1节,“NDB 集群磁盘数据对象”,获取更多信息。ADD DATAFILE不支持InnoDB表空间。

使用DROP DATAFILE语句与ALTER TABLESPACE删除file_name文件,从一个NDB表空间中。不能删除正在被表使用的数据文件;换言之,数据文件必须为空(无使用的extent)。请参阅第25.6.11.1节,“NDB 集群磁盘数据对象”。此外,任何要删除的数据文件都必须先使用CREATE TABLESPACEALTER TABLESPACE添加到表空间中。DROP DATAFILE不支持InnoDB表空间。

WAIT语句被解析,但否则被忽略。它旨在未来扩展中使用。

ENGINE子句,指定表空间存储引擎,是过时的,因为数据字典知道表空间存储引擎,使ENGINE子句变得无用。在 MySQL 8.4 中,它只在以下两个情况下支持:

  • ALTER TABLESPACE tablespace_name ADD DATAFILE 'file_name'
        ENGINE={NDB|NDBCLUSTER}
  • ALTER UNDO TABLESPACE tablespace_name SET {ACTIVE|INACTIVE}
        ENGINE=INNODB

您应该预期将来版本中也删除ENGINE语句。

RENAME TO操作隐式地在自动提交模式下执行,不管autocommit的值。

不能在对表空间进行LOCK TABLESFLUSH TABLES WITH READ LOCK操作时执行RENAME TO操作,对于位于表空间中的表。

对一般表空间进行重命名时,会获取独占的元数据锁定

要对InnoDB一般表空间进行重命名,需要CREATE TABLESPACE特权权限。

AUTOEXTEND_SIZE选项定义了InnoDB扩展表空间的大小,当表空间满时扩展的大小必须是4MB的倍数,缺省值为0,根据隐式默认行为来扩展。详见第17.6.3.9节,“表空间AUTOEXTEND_SIZE配置”

ENCRYPTION子句用于启用或禁用InnoDB一般表空间或mysql系统表空间的页面级别数据加密。

需要安装和配置keyring插件才能启用加密。

如果启用了table_encryption_privilege_check变量,需要TABLE_ENCRYPTION_ADMIN特权来修改一个具有不同于default_table_encryption设置的通用表空间的ENCRYPTION子句。

为通用表空间启用加密失败,如果该表空间中的任何表属于以DEFAULT ENCRYPTION='N'定义的架构。类似地,禁用加密也失败,如果该表空间中的任何表属于以DEFAULT ENCRYPTION='Y'定义的架构。

如果对通用表空间执行了不包含ENCRYPTION子句的ALTER TABLESPACE语句,表空间保留当前加密状态,不管default_table_encryption设置。

当通用表空间或mysql系统表空间加密时,表空间中的所有表都加密。类似地,在加密表空间中创建的表也加密。

当对通用表空间或mysql系统表空间的ENCRYPTION属性进行修改时,使用INPLACE算法。该算法允许在表空间中的表上同时执行DML操作,但阻止了DDL操作。

更多信息,请参见第17.13节,“InnoDB 静态数据加密”

ENGINE_ATTRIBUTE选项用于指定主要存储引擎的表空间属性。该选项保留供将来使用。

分配给这个选项的值是一个有效的JSON文档字符串或空字符串 ('')。无效的JSON将被拒绝。

ALTER TABLESPACE ts1 ENGINE_ATTRIBUTE='{"key":"value"}';

ENGINE_ATTRIBUTE值可以重复没有错误。在这种情况下,最后指定的值将被使用。

服务器不检查ENGINE_ATTRIBUTE值,也不会在表存储引擎更改时清除这些值。

不能单独修改JSON属性值只能添加或替换一个属性。