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']
该语句用于NDB
和InnoDB
表空间。它可以用来添加一个数据文件到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 TABLESPACE
或ALTER 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 TABLES
或FLUSH 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属性值只能添加或替换一个属性。