10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 41.6 mb
PDF (A4)- 41.7 mb
手册页(TGZ)- 262.1 kb
手册页(邮政编码)- 372.2 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

13.1.21 CREATE TABLESPACE语句

创建表空间(撤销)tablespace_nameInnoDB NDB:(添加功能file_name”][AUTOEXTEND_SIZE (=)价值InnoDB只有:[FILE_BLOCK_SIZE =价值][加密(=){' Y ' | ' N '})NDB只有:使用日志文件组logfile_group(EXTENT_SIZE (=)extent_size] [INITIAL_SIZE (=)initial_size] [MAX_SIZE (=)max_size][节点组(=)nodegroup_id[wait] [comment [=] '字符串']InnoDB NDB:(引擎(=)engine_name保留供将来使用的:[ENGINE_ATTRIBUTE[=]”字符串']

该语句用于创建表空间。精确的语法和语义取决于所使用的存储引擎。在标准的MySQL版本中,这总是一个InnoDB表空间。MySQL NDB Cluster也支持使用NDB存储引擎。

考虑InnoDB

创建表空间语法用于创建通用表空间或撤消表空间。的撤销关键字,在MySQL 8.0.14中引入,必须指定undo表空间。

通用表空间是一个共享表空间。它可以保存多个表,并支持所有表行格式。通用表空间可以创建在相对于或独立于数据目录的位置上。

在创建一个InnoDB一般的表空间,使用创建表tbl_name...表空间(=)tablespace_nameALTER TABLEtbl_name表空间(=)tablespace_name向表空间中添加表。有关更多信息,请参见第15.6.3.3节,“一般表空间”

Undo表空间包含Undo日志。通过指定完全限定的数据文件路径,可以在选定的位置创建Undo表空间。有关更多信息,请参见第15.6.3.4节“撤消表空间”

对于NDB集群的考虑

该语句用于创建一个表空间,该表空间可以包含一个或多个数据文件,为NDB集群磁盘数据表提供存储空间第23.6.10节“NDB集群磁盘数据表”).使用这条语句创建一个数据文件并将其添加到表空间。方法可以向表空间添加其他数据文件修改表空间声明(见第13.1.10节,“ALTER TABLESPACE语句”).

请注意

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

一个或多个日志文件组撤销日志文件必须分配给要用使用日志文件组条款。logfile_group必须是已存在的日志文件组创建日志文件组(见第13.1.16节," CREATE LOGFILE GROUP Statement ").多个表空间可以使用相同的日志文件组撤销日志记录。

当设置EXTENT_SIZEINITIAL_SIZE,您可以选择在数字后面加上一个数量级的单字母缩写,类似于my.cnf.一般来说,这是其中一个字母(字节)G(g)。

INITIAL_SIZE而且EXTENT_SIZE须按以下四舍五入计算:

  • EXTENT_SIZE四舍五入到最接近的32K的整数倍。

  • INITIAL_SIZE是圆形的下来最接近32K的整数倍;这个结果四舍五入到最接近的整数倍EXTENT_SIZE(在任何四舍五入)。

请注意

NDB为数据节点重启操作预留4%的表空间。此预留空间不能用于数据存储。

刚才描述的舍入是显式完成的,MySQL服务器在执行任何此类舍入时都会发出警告。NDB内核也使用四舍五入的值进行计算INFORMATION_SCHEMA。文件列值和其他用途。但是,为了避免意外的结果,我们建议在指定这些选项时始终使用32K的整数倍。

创建表空间是使用引擎[=]NDB,在每个Cluster数据节点上创建一个表空间和相关的数据文件。查询数据文件,可以验证数据文件是否已创建,并获取数据文件的相关信息INFORMATION_SCHEMA。文件表格(请参阅本节后面的示例。)

(见第26.3.15节“INFORMATION_SCHEMA文件表”.)

选项

  • 添加数据文件:定义表空间数据文件的名称。创建对象时,总是需要此选项NDB表空间;为InnoDB在MySQL 8.0.14及以后版本中,只有在创建undo表空间时才需要。的file_name,包括任何指定的路径,必须用单引号或双引号引用。文件名(不包括文件扩展名)和目录名的长度必须至少为一个字节。不支持零长度的文件名和目录名。

    因为在如何InnoDB而且NDB对于数据文件,这两种存储引擎将在接下来的讨论中分别讨论。

    InnoDB数据文件。一个InnoDB表空间只支持单个数据文件,其名称必须包含.ibd扩展。

    放置一个InnoDB一般表空间数据文件位于数据目录之外的位置,包括完全限定路径或相对于数据目录的路径。undo表空间只允许完全限定的路径。如果不指定路径,则在数据目录中创建通用表空间。未指定路径创建的undo表空间创建在innodb_undo_directory变量。如果innodb_undo_directory变量未定义,则在数据目录中创建undo表空间。

    要避免与隐式创建的“每表文件”表空间发生冲突,可以创建InnoDB不支持data目录下子目录下的普通表空间。当在数据目录外创建通用表空间或undo表空间时,该目录必须存在,并且必须已知InnoDB在创建表空间之前。使…知道一个目录InnoDB,把它加到innodb_directories对象的值或附加到其中一个变量innodb_directories价值。innodb_directories只读变量。配置它需要重新启动服务器。

    如果添加数据文件子句在创建InnoDB表空间,隐式创建一个具有惟一文件名的表空间数据文件。唯一文件名是一个128位的UUID,格式化为五组用破折号分隔的十六进制数(aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee).如果存储引擎需要,则添加文件扩展名。一个.ibd添加文件扩展名InnoDB一般表空间数据文件。在复制环境中,复制源服务器上创建的数据文件名与副本上创建的数据文件名不相同。

    从MySQL 8.0.17开始,添加数据文件子句不允许在创建InnoDB表空间。例如,循环目录引用(/ . .)在以下声明中使用:

    创建表空间ts1添加数据文件ts1。炎症性肠病的any_directory/ . . / ts1.ibd ';

    在Linux上有一个例外,如果前面的目录是符号链接,则允许循环目录引用。例如,上面示例中的数据文件路径是允许的,如果any_directory是一个符号链接。(仍然允许数据文件路径以'开头. . /”。)

    NDB数据文件。一个NDB表空间支持多个数据文件,这些文件可以有任何合法的文件名;创建NDB集群表空间后,可以向表空间中添加更多的数据文件修改表空间声明。

    一个NDB表空间数据文件默认创建在数据节点文件系统目录下,即命名目录下ndb_nodeid_fs / TS在数据节点的数据目录下(DataDir),nodeid数据节点的NodeId.若要将数据文件放置在默认位置以外的位置,请包含绝对目录路径或相对于默认位置的路径。如果指定的目录不存在,NDB试图创造它;运行数据节点进程的系统用户帐户必须具有相应的权限。

    请注意

    在确定用于数据文件的路径时,NDB不展开(符号)字符。

    当多个数据节点运行在同一物理主机上时,需要考虑以下事项:

    • 创建数据文件时不能指定绝对路径。

    • 不能在数据节点文件系统目录之外创建表空间数据文件,除非每个数据节点都有一个单独的数据目录。

    • 如果每个数据节点都有自己的数据目录,则可以在该目录中的任何位置创建数据文件。

    • 如果每个数据节点都有自己的数据目录,那么还可以使用相对路径在节点的数据目录之外创建数据文件,只要该路径解析为主机文件系统上运行的每个数据节点的唯一位置。

  • FILE_BLOCK_SIZE:该选项特定于InnoDB一般表空间,并且被忽略NDB-定义表空间数据文件的块大小。值可以以字节或千字节指定。例如,一个8kb的文件块大小可以指定为8192或8K。如果不指定此选项,FILE_BLOCK_SIZE默认的innodb_page_size价值。FILE_BLOCK_SIZE当您打算使用表空间存储compressedInnoDB表(ROW_FORMAT =压缩).在这种情况下,必须定义表空间FILE_BLOCK_SIZE创建表空间时。

    如果FILE_BLOCK_SIZE是平等的innodb_page_size值时,表空间只能包含未压缩行格式的表(紧凑的冗余,动态).表的压缩行格式的物理页大小与未压缩的表不同。因此,压缩表不能与未压缩表共存在同一个表空间中。

    对于包含压缩表的通用表空间,FILE_BLOCK_SIZE必须指定,而FILE_BLOCK_SIZE的有效压缩页大小innodb_page_size价值。此外,压缩表的物理页大小(KEY_BLOCK_SIZE)必须等于FILE_BLOCK_SIZE / 1024.例如,如果innodb_page_size = 16 k,FILE_BLOCK_SIZE = 8 k,KEY_BLOCK_SIZE的值必须是8。有关更多信息,请参见第15.6.3.3节,“一般表空间”

  • 使用日志文件组要求:NDB,这是以前使用创建的日志文件组的名称创建日志文件组.不支持InnoDB,在这里它会失败并出现错误。

  • EXTENT_SIZE:该选项是NDB特有的,InnoDB不支持,失败时会报错。EXTENT_SIZE设置属于表空间的任何文件使用的区段的大小(以字节为单位)。缺省值为1M。最小尺寸是32K,理论最大尺寸是2G,尽管实际的最大尺寸取决于一些因素。在大多数情况下,更改区段大小不会对性能产生任何可测量的影响,除了最不寻常的情况外,建议使用默认值。

    一个程度上是磁盘空间分配的一个单位。在使用另一个区之前,用该区所能包含的尽可能多的数据填充一个区。理论上,每个数据文件最多可以使用65,535 (64K)个区段;然而,建议的最大值是32,768 (32K)。单个数据文件的建议最大大小为32g,即32K个区段×每个区段1mb。此外,一旦将一个区段分配给一个给定的分区,它就不能用于存储来自另一个分区的数据;一个区段不能存储来自多个分区的数据。这意味着,例如,一个表空间只有一个数据文件INITIAL_SIZE(在下面的项目中描述)为256mb,其EXTENT_SIZEis 128M只有两个区,因此最多可以用于存储来自两个不同磁盘数据表分区的数据。

    控件可以查看给定数据文件中仍有多少个区是空闲的INFORMATION_SCHEMA。文件表,从而估算出文件中剩余的空闲空间。有关进一步的讨论和示例,请参见第26.3.15节“INFORMATION_SCHEMA文件表”

  • INITIAL_SIZE:特定于NDB,且不支持InnoDB,在这里它会失败并出现错误。

    INITIAL_SIZE参数设置指定使用的数据文件的总大小(以字节为单位)添加DATATFILE.一旦创建了这个文件,它的大小就不能更改;但是,您可以使用改变表空间……添加数据文件

    INITIAL_SIZE是可选的;默认值为134217728 (128mb)。

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

  • AUTOEXTEND_SIZE: MySQL 8.0.23之前的版本被忽略;从MySQL 8.0.23定义的数量InnoDB当表空间满时扩展表空间的大小。该设置必须是4MB的倍数。默认设置为0,这将导致根据隐式默认行为扩展表空间。有关更多信息,请参见第15.6.3.9节“表空间AUTOEXTEND_SIZE配置”

    在MySQL NDB Cluster 8.0的任何版本中都不起作用,无论使用的存储引擎是什么。

  • MAX_SIZE: MySQL当前忽略;保留以备将来使用。在MySQL 8.0或MySQL NDB Cluster 8.0的任何版本中都不起作用,无论使用的存储引擎是什么。

  • 节点组: MySQL当前忽略;保留以备将来使用。在MySQL 8.0或MySQL NDB Cluster 8.0的任何版本中都不起作用,无论使用的存储引擎是什么。

  • 等待: MySQL当前忽略;保留以备将来使用。在MySQL 8.0或MySQL NDB Cluster 8.0的任何版本中都不起作用,无论使用的存储引擎是什么。

  • 评论: MySQL当前忽略;保留以备将来使用。在MySQL 8.0或MySQL NDB Cluster 8.0的任何版本中都不起作用,无论使用的存储引擎是什么。

  • 加密子句启用或禁用页级数据加密InnoDB一般的表空间。MySQL 8.0.13引入了对通用表空间的加密支持。

    从MySQL 8.0.16开始,如果加密子句未指定时,则default_table_encryption设置控制是否启用加密。的加密条款覆盖default_table_encryption设置。然而,如果table_encryption_privilege_check变量,则TABLE_ENCRYPTION_ADMIN权限使用加密子句设置不同于default_table_encryption设置。

    在创建启用加密的表空间之前,必须安装和配置密匙环插件。

    当一个通用表空间被加密时,驻留在该表空间中的所有表都被加密。同样,在加密表空间中创建的表也是加密的。

    有关更多信息,请参见第15.13节“InnoDB数据静止加密”

  • 引擎:定义使用该表空间的存储引擎engine_name存储引擎的名称。目前,只有InnoDB标准MySQL 8.0版本支持存储引擎。MySQL NDB Cluster两者都支持NDB而且InnoDB表空间。的值default_storage_engine系统变量用于引擎如果未指定该选项。

  • ENGINE_ATTRIBUTEoption(在MySQL 8.0.21中可用)用于为主存储引擎指定表空间属性。该选项保留供将来使用。

    允许的值是一个字符串字面值,包含一个有效的JSON文档或空字符串(")。无效的JSON将被拒绝。

    创建表空间ts1引擎属性=“{”关键”:“价值“}”;

    ENGINE_ATTRIBUTE可以无错误地重复值。在本例中,使用最后指定的值。

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

笔记

  • 有关MySQL表空间命名的规则,请参见第9.2节“模式对象名称”.除了这些规则,斜杠字符(/)是不允许的,也不能使用以…开头的名字innodb_,因为此前缀仅供系统使用。

  • 不支持创建临时通用表空间。

  • 一般表空间不支持临时表。

  • 表空间Option可与创建表ALTER TABLE分配一个InnoDB一个表文件表空间的表分区或子分区。所有分区必须属于同一个存储引擎。将表分区分配给共享InnoDB不支持表空间。共享表空间包括InnoDB系统表空间和通用表空间。

  • 通用表空间支持添加任何行格式的表创建表……表空间innodb_file_per_table不需要启用。

  • innodb_strict_mode不适用于一般表空间。表空间管理规则严格执行,独立于innodb_strict_mode.如果创建表空间参数不正确或不兼容,操作失败innodb_strict_mode设置。将表添加到通用表空间时使用创建表……表空间ALTER TABLE……表空间innodb_strict_mode被忽略,但语句被计算为innodb_strict_mode启用。

  • 使用删除表空间删除一个表空间。使用的表空间中必须删除所有表删除表在删除表空间之前。在删除一个NDB集群表空间之前,还必须使用一个或多个数据文件删除它的所有数据文件改变表空间……DATATFILE下降语句。看到第23.6.10.1节“NDB集群磁盘数据对象”

  • 的所有部分InnoDB表添加到InnoDB一般表空间位于一般表空间中,包括索引和页面。

    对于一个NDB表分配给表空间时,只有那些没有被索引的列存储在磁盘上,并实际使用表空间数据文件。所有的索引和索引列NDB表总是保存在内存中。

  • 与系统表空间类似,截断或删除存储在通用表空间中的表会在通用表空间内部创建空闲空间.ibd数据文件哪些只能用于新的InnoDB数据。空间不会像每个表文件的表空间那样释放回操作系统。

  • 通用表空间不与任何数据库或模式关联。

  • ALTER TABLE……丢弃表空间而且ALTER TABLE……导入表空间对于属于通用表空间的表不支持。

  • 服务器对引用通用表空间的DDL使用表空间级元数据锁定。相比之下,服务器对引用每表文件表空间的DDL使用表级元数据锁定。

  • 生成的或现有的表空间不能更改为通用表空间。

  • 一般表空间名称和每表文件表空间名称之间没有冲突。的/字符存在于每个表文件的表空间名称中,在一般的表空间名称中是不允许的。

  • , mysqldump而且mysqlpump不抛弃InnoDB创建表空间语句。

InnoDB的例子

这个例子演示了创建通用表空间并添加三个不同行格式的未压缩表。

创建表空间“ts1”,添加数据文件“ts1”。炎症性肠病的引擎= INNODB;CREATE TABLE t1 (c1 INT PRIMARY KEY)表空间ts1 ROW_FORMAT=冗余;CREATE TABLE t2 (c1 INT PRIMARY KEY)表空间ts1 ROW_FORMAT=COMPACT;CREATE TABLE 3 (c1 INT PRIMARY KEY)表空间ts1 ROW_FORMAT=DYNAMIC;

这个例子演示了创建通用表空间和添加压缩表。该示例假设有一个默认值innodb_page_size16 k的价值。的FILE_BLOCK_SIZE的值要求压缩表具有KEY_BLOCK_SIZE的8。

CREATE TABLESPACE 'ts2 ' ADD DATAFILE 'ts2。ibd' FILE_BLOCK_SIZE = 8192 Engine=InnoDB;CREATE TABLE t4 (c1 INT PRIMARY KEY)表空间ts2 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;

对象创建通用表空间添加数据文件子句,在MySQL 8.0.14中是可选的。

CREATE TABLESPACE ' ts3 ' ENGINE=INNODB;

这个例子演示了如何创建undo表空间。

创建UNDO表空间undo_003添加数据文件”undo_003.ibu ';

NDB例子

假设需要创建一个名称为“。”的NDB集群磁盘数据表空间迈伊兹集团使用名为mydata - 1. - dat.一个NDB表空间总是需要使用由一个或多个undo日志文件组成的日志文件组。对于本例,我们首先创建一个名为mylg,其中包含一个名为myundo - 1. - dat,使用创建日志文件组声明所示:

mysql> CREATE LOGFILE GROUP myg1 -> ADD UNDOFILE 'myundo-1.dat' -> ENGINE=NDB;查询OK, 0行受影响(3.29秒)

现在你可以用下面的语句创建表空间了:

mysql> CREATE TABLESPACE myts -> ADD DATAFILE 'mydata .dat' -> USE LOGFILE GROUP mylg -> ENGINE=NDB;查询OK, 0行受影响(2.98秒)

方法创建磁盘数据表创建表声明的表空间而且存储磁盘选项,类似于这里显示的:

mysql> CREATE TABLE mytable (-> id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, -> lname VARCHAR(50) NOT NULL, -> dob DATE NOT NULL, -> joined DATE NOT NULL, -> INDEX(last_name, first_name) ->) -> TABLESPACE myts STORAGE DISK -> ENGINE=NDB;查询OK, 0行受影响(1.41秒)

重要的是要注意,只有强加于人而且加入mytable实际上存储在磁盘上,因为idlname,列都被索引了。

如前所述,当创建表空间是使用引擎[=]NDB,在每个NDB集群数据节点上创建一个表空间和相关的数据文件。查询数据文件,可以验证数据文件是否已创建,并获取数据文件的相关信息INFORMATION_SCHEMA。文件表,如下所示:

mysql> SELECT FILE_NAME, FILE_TYPE, LOGFILE_GROUP_NAME, STATUS, EXTRA -> FROM INFORMATION_SCHEMA。WHERE TABLESPACE_NAME = 'myts';+--------------+------------+--------------------+--------+----------------+ | file_name | file_type | logfile_group_name | |额外的地位  | +--------------+------------+--------------------+--------+----------------+ | mydata - 1. - dat功能| | mylg正常| | CLUSTER_NODE = 5 | | mydata - 1. - dat功能| | mylg正常| | CLUSTER_NODE = 6 | |零|表空间| mylg正常| | NULL  | +--------------+------------+--------------------+--------+----------------+ 3行集(0.01秒)

有关更多信息和示例,请参见第23.6.10.1节“NDB集群磁盘数据对象”