13.1.9 ALTER TABLESPACE 语句

ALTER TABLESPACE tablespace_name
    {ADD | DROP} DATAFILE 'file_name'
    [INITIAL_SIZE [=] size]
    [WAIT]
    ENGINE [=] engine_name

该语句用于添加新数据文件或从 table 空间删除数据文件。

ADD DATAFILE变体使您可以使用INITIAL_SIZE子句指定初始大小,其中* size 以字节为单位;默认值为 134217728(128 MB)。您可以选择在 size *之后加上一个字母的缩写,table 示一个数量级,类似于my.cnf中使用的缩写。通常,这是字母M(兆字节)或G(千兆字节)之一。

Note

所有 NDB 群集磁盘数据对象共享相同的名称空间。这意味着“每个磁盘数据对象”必须被唯一命名(而不仅仅是给定类型的每个磁盘数据对象)。例如,不能有一个具有相同名称的 table 空间和一个数据文件,或具有相同名称的撤消日志文件和一个 table 空间。

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

INITIAL_SIZECREATE TABLESPACE一样被四舍五入。

一旦创建了数据文件,就无法更改其大小。但是,您可以使用其他ALTER TABLESPACE ... ADD DATAFILE语句将更多数据文件添加到 table 空间。

DROP DATAFILEALTER TABLESPACE一起使用会从 table 空间中删除数据文件'* file_name *'。您不能从任何 table 正在使用的 table 空间中删除数据文件。换句话说,数据文件必须为空(不使用扩展数据块)。参见第 21.5.10.1 节“ NDB 群集磁盘数据对象”。此外,必须先使用CREATE TABLESPACEALTER TABLESPACE将任何要删除的数据文件添加到 table 空间中。

ALTER TABLESPACE ... ADD DATAFILEALTER TABLESPACE ... DROP DATAFILE都需要一个ENGINE子句,该子句指定 table 空间使用的存储引擎。当前,* engine_name *唯一可接受的值为NDBNDBCLUSTER

WAIT已解析,但以其他方式忽略,因此在 MySQL 5.7 中无效。它打算用于将来的扩展。

ALTER TABLESPACE ... ADD DATAFILEENGINE = NDB一起使用时,将在每个 Cluster 数据节点上创建一个数据文件。您可以通过查询INFORMATION_SCHEMA.FILEStable 来验证是否已创建数据文件并获取有关它们的信息。例如,以下查询显示属于newts的 table 空间的所有数据文件:

mysql> SELECT LOGFILE_GROUP_NAME, FILE_NAME, EXTRA
    -> FROM INFORMATION_SCHEMA.FILES
    -> WHERE TABLESPACE_NAME = 'newts' AND FILE_TYPE = 'DATAFILE';
+--------------------+--------------+----------------+
| LOGFILE_GROUP_NAME | FILE_NAME    | EXTRA          |
+--------------------+--------------+----------------+
| lg_3               | newdata.dat  | CLUSTER_NODE=3 |
| lg_3               | newdata.dat  | CLUSTER_NODE=4 |
| lg_3               | newdata2.dat | CLUSTER_NODE=3 |
| lg_3               | newdata2.dat | CLUSTER_NODE=4 |
+--------------------+--------------+----------------+
2 rows in set (0.03 sec)

See 第 24.9 节“ INFORMATION_SCHEMA FILEStable”.

ALTER TABLESPACE仅对 NDB 群集的磁盘数据存储有用。参见第 21.5.10 节“ NDB 群集磁盘数据 table”