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_SIZE
与CREATE TABLESPACE一样被四舍五入。
一旦创建了数据文件,就无法更改其大小。但是,您可以使用其他ALTER TABLESPACE ... ADD DATAFILE
语句将更多数据文件添加到 table 空间。
将DROP DATAFILE
与ALTER TABLESPACE一起使用会从 table 空间中删除数据文件'* file_name
*'。您不能从任何 table 正在使用的 table 空间中删除数据文件。换句话说,数据文件必须为空(不使用扩展数据块)。参见第 21.5.10.1 节“ NDB 群集磁盘数据对象”。此外,必须先使用CREATE TABLESPACE或ALTER TABLESPACE将任何要删除的数据文件添加到 table 空间中。
ALTER TABLESPACE ... ADD DATAFILE
和ALTER TABLESPACE ... DROP DATAFILE
都需要一个ENGINE
子句,该子句指定 table 空间使用的存储引擎。当前,* engine_name
*唯一可接受的值为NDB和NDBCLUSTER。
WAIT
已解析,但以其他方式忽略,因此在 MySQL 5.7 中无效。它打算用于将来的扩展。
当ALTER TABLESPACE ... ADD DATAFILE
与ENGINE = 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”。