设置NDB_TABLE选项
在MySQL NDB Cluster中,CREATE TABLE
or ALTER TABLE
语句中的表注释还可用于指定一个NDB_TABLE
选项,该选项由一个或多个名称-值对组成,并在字符串后用逗号分隔(如果需要)NDB_TABLE=
。名称和值语法的完整语法如下所示:
COMMENT ="NDB_TABLE=ndb_table_option[,ndb_table_option[,...]]" ndb_table_option: NOLOGGING={1|0} | READ_BACKUP={1|0} | PARTITION_BALANCE={FOR_RP_BY_NODE|FOR_RA_BY_NODE|FOR_RP_BY_LDM |FOR_RA_BY_LDM|FOR_RA_BY_LDM_X_2 |FOR_RA_BY_LDM_X_3|FOR_RA_BY_LDM_X_4} | FULLY_REPLICATED={1|0}
带引号的字符串中不允许有空格。字符串不区分大小写。
NDB
在接下来的几段中,将详细介绍可以以这种方式设置为注释一部分的四个表格选项。
NOLOGGING
:使用1表示已ndb_table_no_logging
启用,但没有实际效果。作为占位符提供,主要用于ALTER TABLE
语句的完整性。
READ_BACKUP
:将此选项设置为1与ndb_read_backup
启用时具有相同的效果;允许从任何副本读取。这样做大大提高了从表中读取数据的性能,而写入性能却相对较低。从NDB 8.0.19开始,的默认值为1 READ_BACKUP
,而默认ndb_read_backup
值为ON
(以前,默认情况下禁用从任何副本读取的操作)。
您可以READ_BACKUP
使用ALTER TABLE
类似于以下所示之一的语句在线设置现有表:
ALTER TABLE ...ALGORITHM =INPLACE,COMMENT ="NDB_TABLE=READ_BACKUP=1";ALTER TABLE ...ALGORITHM =INPLACE,COMMENT ="NDB_TABLE=READ_BACKUP=0";
有关该ALGORITHM
选项的更多信息ALTER TABLE
,请参见“ NDB群集中使用ALTER TABLE的在线操作”。
PARTITION_BALANCE
:提供对分区分配和放置的附加控制。支持以下四种方案:
FOR_RP_BY_NODE
:每个节点一个分区。每个节点上只有一个LDM存储一个主分区。每个分区都存储在所有节点上的相同LDM(相同ID)中。
FOR_RA_BY_NODE
:每个节点组一个分区。每个节点存储一个分区,该分区可以是主副本或备份副本。每个分区都存储在所有节点上的同一LDM中。
FOR_RP_BY_LDM
:每个节点上每个LDM有一个分区;默认值。这与MySQL NDB Cluster 7.5.2之前的行为相同,不同之处在于,分区到LDM的映射略有不同,从LDM 0开始并为每个节点组放置一个分区,然后移至下一个LDM。
如果
READ_BACKUP
设置为1,则使用此设置。FOR_RA_BY_LDM
:每个节点组中的每个LDM都有一个分区。这些分区可以是主分区或备份分区。
FOR_RA_BY_LDM_X_2
:每个节点组中的每个LDM都有两个分区。这些分区可以是主分区或备份分区。
FOR_RA_BY_LDM_X_3
:每个节点组中的每个LDM都有三个分区。这些分区可以是主分区或备份分区。
FOR_RA_BY_LDM_X_4
:每个节点组中的每个LDM四个分区。这些分区可以是主分区或备份分区。
PARTITION_BALANCE
是用于设置每个表的分区数的首选界面。不建议使用MAX_ROWS
强制使用分区数,但是为了向后兼容,继续支持该方法。它会在将来的MySQL NDB Cluster版本中删除。(缺陷#81759,错误#23544301)
FULLY_REPLICATED
控制表是否被完全复制,即,每个数据节点是否具有表的完整副本。要启用表的完全复制,请使用FULLY_REPLICATED=1
。
也可以使用ndb_fully_replicated
系统变量来控制此设置。设置为ON
默认启用所有新NDB
表的选项;默认值为OFF
。该ndb_data_node_neighbour
系统变量也可用于完全复制表,以确保当被访问的完全复制表中,我们访问的是本地本MySQL服务器的数据节点。
CREATE TABLE
创建NDB
表时使用此类注释的语句示例如下所示:
mysql>CREATE TABLE t1 ( > c1 INT NOT NULLAUTO_INCREMENT PRIMARY KEY , > c2 VARCHAR(100), > c3 VARCHAR(100) ) >ENGINE =NDB >COMMENT ="NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RP_BY_NODE";
注释显示为的输出的一部分SHOW CREATE TABLE
。注释文本也可通过查询MySQL Information Schema TABLES
表获得,如以下示例所示:
mysql>SELECT TABLE_NAME , TABLE_SCHEMA, TABLE_COMMENT >FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME ="t1"; +------------ +-------------- +---------------------------------------------------------- + | TABLE_NAME | TABLE_SCHEMA | TABLE_COMMENT | +------------ +-------------- +---------------------------------------------------------- + | t1 | c | NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RP_BY_NODE | | t1 | d | | +------------ +-------------- +---------------------------------------------------------- + 2 rows in set (0.00 sec)
表的ALTER TABLE
语句也支持此注释语法NDB
。请记住,与一起使用的表注释ALTER TABLE
将替换表可能具有的任何现有注释。
mysql>ALTER TABLE t1COMMENT ="NDB_TABLE=PARTITION_BALANCE=FOR_RA_BY_NODE"; Query OK, 0 rows affected (0.40 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql>SELECT TABLE_NAME , TABLE_SCHEMA, TABLE_COMMENT >FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME ="t1"; +------------ +-------------- +-------------------------------------------------- + | TABLE_NAME | TABLE_SCHEMA | TABLE_COMMENT | +------------ +-------------- +-------------------------------------------------- + | t1 | c | NDB_TABLE=PARTITION_BALANCE=FOR_RA_BY_NODE | | t1 | d | | +------------ +-------------- +-------------------------------------------------- + 2 rows in set (0.01 sec)
您还PARTITION_BALANCE
可以在ndb_desc的输出中看到该选项的值。ndb_desc还显示是否为表设置了READ_BACKUP
和FULLY_REPLICATED
选项。有关更多信息,请参见此程序的说明。
因为该READ_BACKUP
值未传递到该ALTER TABLE
语句设置的新注释集,所以不再有使用SQL检索为其先前设置的值的方法。为了避免这种情况的发生,建议您保留现有注释字符串中的所有此类值,如下所示:
mysql>SELECT TABLE_NAME , TABLE_SCHEMA, TABLE_COMMENT >FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME ="t1"; +------------ +-------------- +---------------------------------------------------------- + | TABLE_NAME | TABLE_SCHEMA | TABLE_COMMENT | +------------ +-------------- +---------------------------------------------------------- + | t1 | c | NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RP_BY_NODE | | t1 | d | | +------------ +-------------- +---------------------------------------------------------- + 2 rows in set (0.00 sec) mysql>ALTER TABLE t1COMMENT ="NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RA_BY_NODE"; Query OK, 0 rows affected (1.56 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql>SELECT TABLE_NAME , TABLE_SCHEMA, TABLE_COMMENT >FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME ="t1"; +------------ +-------------- +---------------------------------------------------------------- + | TABLE_NAME | TABLE_SCHEMA | TABLE_COMMENT | +------------ +-------------- +---------------------------------------------------------------- + | t1 | c | NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RA_BY_NODE | | t1 | d | | +------------ +-------------- +---------------------------------------------------------------- + 2 rows in set (0.01 sec)