ALTER TABLESPACE语句
ALTER [UNDO ]TABLESPACE tablespace_nameNDB only : {ADD |DROP }DATAFILE 'file_name' [INITIAL_SIZE [=] size] [WAIT ] InnoDB andNDB : [RENAME TO tablespace_name] InnoDBonly : [SET {ACTIVE |INACTIVE }] [ENCRYPTION [=] {'Y' | 'N'}] InnoDB andNDB : [ENGINE [=] engine_name]
该语句与NDB
和InnoDB
表空间一起使用。它可用于向NDB
表空间添加新数据文件或从表空间删除数据文件。它还可以用于重命名NDB群集磁盘数据表空间,重命名InnoDB
常规表空间,加密InnoDB
常规表空间或将InnoDB
撤消表空间标记为活动或非活动状态。
UNDO
在MySQL 8.0.14中引入的关键字与该SET{ACTIVE|INACTIVE}
子句一起使用,可将InnoDB
撤消表空间标记为活动或不活动。有关更多信息,请参见“撤消表空间”。
使用该ADD DATAFILE
变体,您可以NDB
使用INITIAL_SIZE
子句为“磁盘数据”表空间指定初始大小,其中size
以字节为单位;默认值为134217728(128 MB)。您可以选择后面size
跟一个字母缩写,代表一个数量级,类似于中使用的缩写my.cnf
。通常,这是字母M
(兆字节)或G
(千兆字节)之一。
在32位系统上,最大支持值为INITIAL_SIZE
4294967296(4 GB)。(缺陷号29186)
INITIAL_SIZE
明确地将舍入为CREATE TABLESPACE
。
创建数据文件后,无法更改其大小;但是,您可以使用其他ALTER TABLESPACE ... ADD DATAFILE
语句将更多数据文件添加到NDB表空间。
当ALTER TABLESPACE ... ADD DATAFILE
与一起使用时ENGINE = NDB
,将在每个“群集”数据节点上创建一个数据文件,但表中仅生成一行INFORMATION_SCHEMA.FILES
。有关更多信息,请参见此表的描述以及“ NDB群集磁盘数据对象”。表空间ADD DATAFILE
不支持InnoDB
。
DROP DATAFILE
与with一起使用可从NDB表空间ALTER TABLESPACE
删除数据文件'file_name
'。您不能从任何表正在使用的表空间中删除数据文件。换句话说,数据文件必须为空(不使用扩展数据块)。请参见“ NDB群集磁盘数据对象”。此外,必须先使用CREATE TABLESPACE
或将要删除的任何数据文件添加到表空间中ALTER TABLESPACE
。表空间DROP DATAFILE
不支持InnoDB
。
WAIT
被解析,但被忽略。它打算用于将来的扩展。
该ENGINE
子句(指定表空间使用的存储引擎)已被弃用,并将在以后的版本中删除。表空间存储引擎是数据字典已知的,这使该ENGINE
子句过时了。如果指定了存储引擎,则它必须与数据字典中定义的表空间存储引擎匹配。engine_name
与NDB
表空间兼容的唯一值是NDB
和NDBCLUSTER
。
RENAME TO
autocommit
无论autocommit
设置如何,都将在模式下隐式执行操作。
甲RENAME TO
而不能执行操作LOCK TABLES
或者FLUSH TABLES WITH READ LOCK
是在驻留在表空间的表的效果。
重命名表空间时,将对驻留在常规表空间中的表进行独占元数据锁,这可以防止并发DDL。支持并发DML。
该CREATE TABLESPACE
权限需要重命名InnoDB
普通表空间。
该ENCRYPTION
子句为InnoDB
通用表空间或mysql
系统表空间启用或禁用页面级数据加密。MySQL 8.0.13中引入了对常规表空间的加密支持。mysql
MySQL 8.0.16中引入了对系统表空间的加密支持。
必须先安装和配置密钥环插件,然后才能启用加密。
从MySQL 8.0.16开始,如果table_encryption_privilege_check
启用了变量,TABLE_ENCRYPTION_ADMIN
则需要特权来更改带有ENCRYPTION
不同于该子句设置的子句设置的常规表空间default_table_encryption
。
如果表空间中的任何表属于使用定义的架构,则对常规表空间启用加密将失败DEFAULT ENCRYPTION='N'
。同样,如果通用表空间中的任何表属于定义的架构,则禁用加密都会失败DEFAULT ENCRYPTION='Y'
。该DEFAULT ENCRYPTION
模式选项在MySQL 8.0.16介绍。
如果ALTER TABLESPACE
在常规表空间上执行的语句不包含ENCRYPTION
子句,则无论default_table_encryption
设置如何,表空间都将保留其当前的加密状态。
当对通用表空间或mysql
系统表空间进行加密时,驻留在该表空间中的所有表都将被加密。同样,在加密表空间中创建的表也被加密。
INPLACE
更改ENCRYPTION
通用表空间或mysql
系统表空间的属性时使用该算法。该INPLACE
算法允许对驻留在表空间中的表进行并发DML。并发DDL被阻止。
有关更多信息,请参见“ InnoDB静态数据加密”。