hhdb数据库介绍(9-18)

news/2024/11/29 11:09:07/文章来源:https://www.cnblogs.com/henghuixinda/p/18576164

SQL语法支持

计算节点语法特殊功能

默认分片规则建表

在使用关系集群数据库时,需要先将表的分片规则信息配置好之后才能创建表。实际使用过程中,用户可能对关系集群数据库及分片规则不了解,这就需要一种能直接过渡到HHDB Server的方案,该方案能根据逻辑库关联的分片节点数量自动对表生成分片规则,称为默认分片规则。

使用前提: 逻辑库已设置分片节点。为逻辑库设置分片节点的方法如下:登录关系集群数据库平台,选择"配置"->"逻辑库",给逻辑库设置默认分片节点,然后点动态加载。
在这里插入图片描述
功能说明: 为逻辑库设置默认分片节点后,登录计算节点可以直接建表,计算节点将根据分片节点的数量为创建的表自动设置分片规则信息。具体的分片规则如下:

如果逻辑库只设置了一个分片节点,则计算节点对创建的表不做分片处理,在计算节点中将此类表称为创建垂直分片表。

如果逻辑库设置了多个分片节点,则计算节点对创建的表进行水平分片,分片算法是对每行数据分片字段的值进行AUTO_CRC32从而确定该行数据应被存储在哪个分片节点中,分片字段选取顺序:主键字段 -> 唯一键字段 ->第一个整型字段(BIGINT、INT、MEDIUMINT、SMALLINT、TINYINT) ->没有整型字段时取字符串类型字段(CHAR、VARCHAR),以上类型全部没有时默认随机选择一个字段作为分片字段。
在这里插入图片描述
注意:

此功能仅推荐在初次接触HHDB Server的时候使用,正式交付以及上线不推荐,需要根据实际业务场景做分片。

若后期对逻辑库默认节点进行更改,对更改之前创建的表无影响,只对后续新增的表生效。

计算节点中对表分为三类:全局表、水平分片表、垂直分片表。

  • 全局表:在计算节点中如果一个表被定义为全局表,则该表存储在逻辑库下的所有分片节点中,且每个分片节点中该表的数据都是完全一致的全量数据。
  • 水平分片表:在计算节点中如果一个表被定义为水平分片表,则该表存储在逻辑库下的所有分片节点中,且每个分片节点中该表的数据都只是部分行数据,所有分片节点中该表的数据合在一起才是该表的全量数据。
  • 垂直分片表:在计算节点中如果一个表被定义为垂直分片表,则该表仅存储在逻辑库下的一个分片节点中(其余分片节点无该表信息),且该分片节点中存储该表的全量数据。计算节点中垂直分片表与一般垂直分片表概念不同,不是按列进行分片存储的。

例子:

假设"test001"逻辑库配置了一个默认分片节点,则"test01"表为垂直分片表;假设"test002"逻辑库配置了两个默认分片节点,则"test02"表为水平分片表。

mysql> use TEST001;
Database changedmysql> create table test01(id not null auto_increment primary key,a char(8),b decimal(4,2),c int);
mysql> use TEST002;Database changed
mysql> create table test02(id not null auto_increment primary key,a char(8),b decimal(4,2),c int);

在这里插入图片描述

已有分片规则建表

使用前提: 在管理平台上已创建了分片规则,并进行了动态加载。添加分片规则请参考管理平台文档。

功能说明: 根据管理平台已添加好的分片规则,在计算节点服务端利用特殊语句直接建表,无需再配置表分片信息。利用已有分片规则所建的表,删除表后,管理平台相关表配置信息会同步被删除。
在这里插入图片描述
利用服务端口命令查看分片规则的functionid | functionname| functiontype| ruleid | rulename等信息,根据相关字段信息创建表。

mysql> show hotdb functions;
+-------------+---------------------+---------------+----------------+
| function_id | function_name       | function_type | auto_generated |
+-------------+---------------------+---------------+----------------+
| 1           | AUTO_GENERATE_CRC32 | AUTO_CRC2     | 1              |
| 2           | AUTO_CRC32_4        | AUTO_CRC32    | 0              |
| 3           | AUTO_CRC32_1        | AUTO_CRC32    | 0              |
| 26          | AUTO_GENERATE_MOD   | AUTO_MOD      | 1              |
| 31          | 29__MATCH1          | MATCH         | 0              |
| 33          | 32_SIMPLE_MOD       | SIMPLE_MOD    | 0              |
| 36          | 36_SIMPLE_MOD       | SIMPLE_MOD    | 0              |
| 37          | 37_CRC32_MOD        | CRC32_MOD     | 0              |
+-------------+---------------------+---------------+----------------+
8 rows in set (0.01 sec)mysql> show hotdb rules;
+---------+--------------------------------------------------+-------------+-------------+----------------+
| rule_id | rule_name                                        | rule_column | function_id | auto_generated |
+---------+--------------------------------------------------+-------------+-------------+----------------+
| 4       | hotdb-cloud_555f9d00-27c3-4eaa-860c-309312672908 | id          | 3           | 0              |
| 12      | hotdb-cloud_8b7d9b8d-f711-476c-aa33-a4e2af184ab5 | adnid       | 2           | 0              |
| 13      | hotdb-cloud_7f8fff18-6016-47f1-ab0a-1912f5b75523 | adnid       | 2           | 0              |
| 21      | AUTO_GENERATE_3_JOIN_A_JWY                       | ID          | 1           | 1              |
| 50      | AUTO_GENERATE_9_FT_ADDR                          | ID          | 26          | 1              |
| 64      | AUTO_GENERATE_23_S03                             | A           | 1           | 1              |
+---------+--------------------------------------------------+-------------+-------------+----------------+
6 rows in set (0.01 sec)

水平分片表

水平分片表是指将表的数据按行以分片列的分片规则进行拆分,拆分后的分片数据存储不同的数据节点。数据量大的表适合定义为水平分片表。

水平分片表创建语法如下:

CREATE TABLE [IF NOT EXISTS] tbl_name SHARD BY {functionid | functionname} 'functionid | functionname' USING COLUMN 'shardcolumnname' (table define...)
CREATE TABLE [IF NOT EXISTS] tbl_name SHARD BY {functiontype} 'functiontype' USING COLUMN 'shardcolumnname' on datanode 'datanodeid' (table define...)

同时也可以将SHARD BY 之后的关键字放置表定义之后(垂直分片表、全局表亦同),示例:

CREATE TABLE [IF NOT EXISTS] tbl_name (table define...) SHARD BY {functiontype} 'functiontype' USING COLUMN 'shardcolumnname' on datanode 'datanodeid'(.....);

水平分片表创建语法说明:

  • SHARD BY {FUNCTIONID | FUNCTIONNAME | FUNCTIONTYPE} - 指分片函数ID、分片函数名称、分片函数类型的关键字。
  • functionid_value | functionname_value | functiontype_value - 指具体的分片函数ID、分片函数名称、分片函数类型的值。
  • USING COLUMN - 指分片列的关键字。
  • shardcolumnname - 指具体的分片列的列名。
  • ON DATANODE - 指数据节点的关键字。
  • datanodeid - 指具体的数据节点的值,多个不连续的值可以用逗号间隔,多个连续的值可以使用区间形式指定,如:'1,3,4,5-10,12-40'。

登录服务端,切换逻辑库,输入建表语句并执行。

mysql> use fun_zy
Database changedmysql> CREATE TABLE match1_tb shard by functionname 'test_match1' using column 'aname' (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, adnid INT DEFAULT NULL, aname VARCHAR(32) DEFAULT '', adept VARCHAR(40), adate datetime DEFAULT NULL)ENGINE =INNODB;
Query OK, 0 rows affected (0.09 sec)

执行成功,管理平台会显示该表为已定义状态:
在这里插入图片描述
对于此语法规则建表,需要注意以下几点:

  • functionid | functionname | functiontype - 为具体指定的分片函数ID、分片函数名称、分片函数类型
  • shardcolumnname - 为指定的分片字段
  • datanodeid - 节点ID,可以逗号间隔,且支持区间形式指定,如:'1,3,4,5-10,12-40',节点ID可登录关系集群数据库可视化管理平台页面,选择"配置"->"节点管理"查看,也可以登录计算节点服务端口使用命令执行show hotdb datanodes;查看:
mysql> show hotdb datanodes;
+-------------+---------------+---------------+
| datanode_id | datanode_name | datanode_type |
+-------------+---------------+---------------+
| 9           | dn_01         | 0             |
| 11          | dn_02         | 0             |
| 13          | dn_03         | 0             |
| 15          | dn_04         | 0             |
| 19          | dn_failover   | 0             |
| 20          | dn_rmb_01     | 0             |
+-------------+---------------+---------------+
6 rows in set (0.00 sec)
  • functiontype 只支持 auto_crc32/auto_mod, 若使用了其他类型会提示:ERROR:The fucntiontype can only be auto_crc32/auto_mod.
mysql> create table ft_match shard by functiontype 'match' using column 'id' on datanode '11,13'(id int(10) primary key, a char(20) not null);
ERROR 10070 (HY000): The functiontype can only by auto_crc32/auto_mode.
  • 使用functionid | functionname建表时,当指定的function信息关联的function_type 是auto_crc32/auto_mod 时,需要指定on datanode 'datanodes' ,否则会提示:The function must be specified datanodes。 如果是其他类型,则无需指定。
mysql> create table mod_ft shard by functionid '15' using column 'id'(id int(10) primary key, a char(20) not null);
ERROR 10090 (HY000): The function must be specified datanodes.mysql> create table testsa shard by functionid '3' using column 'id'(id int,a int);
Query OK, 0 rows affected, 1 warning (0.10 sec)mysql> CREATE TABLE match_tb shard by functionname 'test_match1' using column 'ananme' on datanode '1,2'(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, adnid INT DEFAULT NULL, aname VARCHAR(32) DEFAULT '', adept VARCHAR(40), adate datetime DEFAULT NULL)ENGINE =INNODB;
ERROR 10090 (HY000): This rule doesn't need to specify a datanodes;

表结构类似的表可以使用相同的分片规则,使用如下语法可直接引用分片规则创建水平分片表:

CREATE  TABLE [IF NOT EXISTS] tbl_name SHARD BY {ruleid | rulename} 'ruleidrulename' [on datanode 'datanodes'] (......

登录计算节点服务端口使用命令,show hotdb rules;和show hotdb functions;可以看到与之分片函数关联的分片规则:

mysql> show hotdb rules;
+---------+---------------------------+-------------+-------------+----------------+
| rule_id | rule_name                 | rule_column | function_id | auto_generated |
+---------+---------------------------+-------------+-------------+----------------+
| 17      | AUTO_GENERATE_3_ROUTE1_TB | A           | 1           | 1              |
+---------+---------------------------+-------------+-------------+----------------+
21 rows in set (0.01 sec)mysql> show hotdb functions;
+-------------+---------------+--------------+----------------+
| function_id | function_name | function_typ | auto_generated |
+-------------+---------------+--------------+----------------+
| 1           | test_route1   | ROUTE        | 1              |
+-------------+---------------+--------------+----------------+
13 rows in set (0.01 sec)

用户可用ruleid/rulename来直接创建表:

mysql> CREATE TABLE rt_table shard by ruleid '17'(id int not null auto_increment primary key,a int(10),b decimanl(5,2),c decimal(5,2),d date,e time(6),f timestamp(6) DEFAULT CURRENT_TIMESTAMP(6),g datetime(6) DEFAULT CURRENT_TIMESTAMP(6),h year,I char(20) charcter set utf8,j varchar(30) character set utf8mb4,k char(20) character set gbk,l text character set latin1, m enum('','null','1','2','3'),n set('','null','1','2','3'));Query OK, 0 rows affected (0.07 sec)

在这里插入图片描述
对于此语法规则建表,需要注意以下几点:

  • 当指定的rule关联的function_type是auto_crc32/auto_mod 时,需要指定on datanode 'datanodes';如果是其他类型,则无需指定datanode。
mysql> show hotdb rules
+---------+---------------------------+-------------+-------------+----------------+
| rule_id | rule_name                 | rule_column | function_id | auto_generated |
+---------+---------------------------+-------------+-------------+----------------+
| 17      | AUTO_GENERATE_3_ROUTE1_TB | A           | 1           | 1              |
+---------+---------------------------+-------------+-------------+----------------+
21 rows in set (0.01 sec)mysql> show hotdb functions;
+-------------+---------------+---------------+----------------+
| function_id | function_name | function_type | auto_generated |
+-------------+---------------+---------------+----------------+
| 1           | test_route1   | ROUTE         | 1              |
+-------------+---------------+---------------+----------------+
13 rows in set (0.01 sec)mysql> CREATE TABLE route2_rptb1 shard by rulename 'AUTO_GENERATE_3_ROUTE1_TB' on datanode '9,11,13'(id int not null auto_increment primary key,a int(10),b decimanl(5,2),c decimal(5,2),d date,e time(6),f timestamp(6) DEFAULT CURRENT_TIMESTAMP(6),g datetime(6) DEFAULT CURRENT_TIMESTAMP(6),h year,i char(20) charcter set utf8,j varchar(30) character set utf8mb4,k char(20) character set gbk,l text character set latin1, m enum('','null','1','2','3'),n set('','null','1','2','3'));ERROR 10090 (HY000): This rule doesn't need to specify a datanodes;

当指定的rule关联的function_type是auto_crc32/auto_mod 时, 指定的datanode 个数与参数不符时,则会提示:ERROR:The total number of datanodes must be XXX(XXX为实际ruleid 关联的 function info的 column_value值):

mysql> CREATE TABLE auto_c shard by ruleid '63' on datanode '9'(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, adnid INT DEFAULT NULL, aname VARCHAR(32) DEFAULT '',adept VARCHAR(40), adate datetime DEFAULT NULL)ENGINE=INNODB;
ERROR 10090 (HY000): The total number of datanodes must be 2mysql> CREATE TABLE auto_c shard by ruleid '63' on datanode '9,15'(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, adnid INT DEFAULT NULL, aname VARCHAR(32) DEFAULT '',adept VARCHAR(40), adate datetime DEFAULT NULL)ENGINE=INNODB;
Query OK, 0 rows affected (0.13 sec)

垂直分片表

垂直分片表是一个全局唯一且不分片的全量表,垂直分片表的全量数据仅存储在一个数据节点。

创建垂直分片表语法:

CREATE TABLE [IF NOT EXISTS] tbl_name SHARD BY vertical on datanode 'datanodeid'(...)

语法说明:

  • SHARD BY VERTICAL是垂直分片关键字
  • ON DATANODE 'datanodeid'只能指定一个数据节点,不指定数据节点或指定多个数据节点都会报错。
mysql> CREATE TABLE tb_vertical shard by vertical on datanode'9'( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, adnid INT DEFAULT NULL, aname VARCAHR(32) DEFAULT '', adept VARCHAR(40), adate DATETIME DEFAULT NULL)ENGINE=INNODB;
Query OK, 0 rows affected(0.07 sec)

在这里插入图片描述
未指定datanode:

mysql> CREATE TABLE tb1_vertical shard by vertical( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, adnid INT DEFAULT NULL, aname VARCAHR(32) DEFAULT '', adept VARCHAR(40), adate DATETIME DEFAULT NULL)ENGINE=INNODB;
ERROR 10090 (HY000): This table has to specify a datanodes.

指定多个节点:

mysql> CREATE TABLE tb1_vertical shard by vertical on datanode'9,11,13'( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, adnid INT DEFAULT NULL, aname VARCAHR(32) DEFAULT '', adept VARCHAR(40), adate DATETIME DEFAULT NULL)ENGINE=INNODB;
ERROR 10090 (HY000): Can only specify one datanodes.

全局表

全局表是指在该逻辑库下的所有数据节点中都存储的表,所有数据节点中该表的表结构和数据都完全一致。数据量小、不会频繁DML、经常与其他表发生JOIN 操作的表适合作为全局表。

创建全局表语法如下:

CREATE TABLE [IF NOT EXISTS] tbl_name SHARD BY global [on datanode 'datanodeid'](...)

语法说明:

  • SHARD BY GLOBAL是全局表关键字。
  • [ON DATANODE 'datanodeid']是指定数据节点的语法。不指定datanodeid则默认按逻辑库默认分片节点+逻辑库下所有表关联节点的并集建表;指定则必须包括全部数据节点,指定部分数据节点会报错。
mysql> CREATE TABLE tb_quan shard by global(id int not null auto_increment primary key,a int(10),b decimanl(5,2),c decimal(5,2),d date,e time(6),f timestamp(6) DEFAULT CURRENT_TIMESTAMP(6),g datetime(6) DEFAULT CURRENT_TIMESTAMP(6),h year,I char(20) null,j varchar(30),k blob,l text, m enum('','null','1','2','3'),n set('','null','1','2','3'));
Query OK, 0 rows affected (0.07 sec)

在这里插入图片描述
语法规则里的global是创建全局表的标志,'datanodeid'为节点ID,可以逗号间隔,且支持区间形式指定,如:'1,3,4,5-10,12-40',使用该语法创建分片规则的全局表,该表的节点应该包括逻辑库下所有节点。

如果逻辑库下没有默认分片节点也没有已经定义的表,则使用特殊语法进行全局表的创建时,需要指定全局表分布的节点:

mysql> CREATE TABLE tb2_quan shard by global(id int not null auto_increment primary key,a int(10),b decimanl(5,2),c decimal(5,2),d date,e time(6),f timestamp(6) DEFAULT CURRENT_TIMESTAMP(6),g datetime(6) DEFAULT CURRENT_TIMESTAMP(6),h year,i char(20) null,j varchar(30),k blob,l text, m enum('','null','1','2','3'),n set('','null','1','2','3'));
ERROR 10090 (HY000): This table has to specify a datanodes.

如果逻辑库下存在已经定义的表,则可以不指定节点或指定节点的时候,需要为该逻辑库下包含节点的最大非重复个数(即所有表所选节点的并集),否则指定部分数据节点会提示建表错误:

mysql> CREATE TABLE tb1_quan shard by global on datanodes'9,11'(id int not null auto_increment primary key,a int(10),b decimanl(5,2),c decimal(5,2),d date,e time(6),f timestamp(6) DEFAULT CURRENT_TIMESTAMP(6),g datetime(6) DEFAULT CURRENT_TIMESTAMP(6),h year,i char(20) null,j varchar(30),k blob,l text, m enum('','null','1','2','3'),n set('','null','1','2','3'));
ERROR 10090 (HY000): The specified datanodes must cover all datanodes of the logical database.

使用已有分片规则建表相关命令

此小节介绍的命令登录到计算节点服务端口、管理端口均可执行。

  1. show hotdb datanodes -- 显示当前可用的节点:
    此命令用于查看配置库中hotdb_datanodes表,语法:
mysql> show hotdb datanodes [LIKE 'pattern' | WHERE expr];

命令包含参数及其说明:

参数 说明 类型
pattern 可选,模糊查询表达式,匹配datanode_name字段 STRING
expr 可选,where条件表达式 STRING

结果包含字段及其说明:

列名 说明 值类型/范围
datanode_id 节点ID INTEGER
datanode_name 节点名称 STRING
datanode_type 0:主备;1:MGR INTEGER

例子:

mysql> show hotdb datanodes;
+-------------+---------------+---------------+
| datanode_id | datanode_name | datanode_type |
+-------------|---------------|---------------+
| 1           | dn_01         | 0             |
| 2           | dn_02         | 0             |
| 4           | dn_04         | 0             |
| 101         | dn_101        | 0             |
| 127         | dn_03         | 0             |
| 186         | dn_199        | 0             |
| 203         | dn_19         | 0             |
+-------------+---------------+---------------+

例子:

mysql> show hotdb datanodes like 'dn_0%';
+-------------+---------------+---------------+
| datanode_id | datanode_name | datanode_type |
+-------------+---------------+---------------+
| 1           | dn_01         | 0             |
| 2           | dn_02         | 0             |
| 4           | dn_04         | 0             |
| 127         | dn_03         | 0             |
+-------------+---------------+---------------+
  1. show hotdb functions -- 显示当前可用的分片函数:

此命令用于查看配置库中hotdb_function表,语法:

mysql> show hotdb functions;

命令包含参数及其说明:

参数 说明 类型
pattern 可选,模糊查询表达式,匹配function_name字段 STRING
expr 可选,where条件表达式 STRING

结果包含字段及其说明:

列名 说明 值类型/范围
function_id 分片函数ID INTEGER
function_name 分片函数名称 STRING
function_type 分片类型 STRING
auto_generated 是否为计算节点自动生成的配置(1:自动生成,其他:非自动生成) INTEGER

例子:

mysql> show hotdb functions;
+-------------+---------------+---------------+----------------+
| function_id | function_name | function_type | auto_generated |
+-------------+---------------+---------------+----------------+
...省略更多...
| 40          | AUTO_CRC32_8  | AUTO_CRC32    | 0              |
| 41          | th_fun_range  | RANGE         | 0              |
| 42          | AUTO_MOD_5    | AUTO_MOD      | 0              |
| 43          | 43_RANGE      | RANGE         | 0              |
| 44          | AUTO_CRC32_15 | AUTO_CRC32    | 0              |
| 45          | AUTO_CRC32_5  | AUTO_CRC32    | 0              |
| 46          | yds_RANGE     | RANGE         | 0              |
| 47          | AUTO_CRC32_11 | AUTO_CRC32    | 0              |
+-------------+---------------+---------------+----------------+

例子:

mysql> show hotdb functions like '%range%';
+-------------+---------------+---------------+----------------+
| function_id | function_name | function_type | auto_generated |
+-------------+---------------+---------------+----------------+
| 41          | th_fun_range  | RANGE         | 0              |
| 43          | 43_RANGE      | RANGE         | 0              |
| 46          | yds_RANGE     | RANGE         | 0              |
+-------------+---------------+---------------+----------------+
3 rows in set (0.00 sec)mysql> show hotdb functions where function_name like '%range%';
+-------------+---------------+---------------+----------------+
| function_id | function_name | function_type | auto_generated |
+-------------+---------------+---------------+----------------+
| 41          | th_fun_range  | RANGE         | 0              |
| 43          | 43_RANGE      | RANGE         | 0              |
| 46          | yds_RANGE     | RANGE         | 0              |
+-------------+---------------+---------------+----------------+
3 rows in set (0.00 sec)
  1. show hotdb function infos - 显示当前可用的分片函数信息:

此命令用于查看配置库中hotdb_function_info 表,语法:

mysql> show hotdb function infos [WHERE expr];

命令包含参数及其说明:

参数 说明 类型
expr 可选,where条件表达式 STRING

结果包含字段及其说明:

列名 说明 值类型/范围
function_id 分片函数ID INTEGER
column_value 分片字段的值 STRING
datanode_id 数据节点id INTEGER

例子:

mysql> show hotdb function infos;
+-------------+--------------+-------------+
| function_id | column_value | datanode_id |
+-------------+--------------+-------------+
| 2           | 4            | 0           |
| 3           | 1            | 0           |
| 4           | 2            | 0           |
| 31          | ''           | 4           |
| 31          | 1            | 1           |
| 31          | 2            | 2           |
| 31          | null         | 127         |
| 33          | 0:1          | 1           |
| 33          | 10:10        | 191         |
| 33          | 11:11        | 186         |
| 33          | 12           | 0           |
| 33          | 2:3          | 2           |
...省略更多...

例子:

mysql> show hotdb function infos where function_id=38;
+-------------+--------------+-------------+
| function_id | column_value | datanode_id |
+-------------+--------------+-------------+
| 38          | 10:12        | 1           |
| 38          | 1:2          | 1           |
| 38          | 20           | 0           |
| 38          | 4:8          | 1           |
+-------------+--------------+-------------+
4 rows in set (0.00 sec)
  1. show hotdb rules -- 显示当前可用的分片规则:

此命令用于查看配置库中hotdb_rule 表,语法:

mysql> show hotdb rules [LIKE 'pattern' | WHERE expr];

命令包含参数及其说明:

参数 说明 类型
pattern 可选,模糊查询表达式,匹配rule_name字段 STRING
expr 可选,where条件表达式 STRING

结果包含字段及其说明:

列名 说明 值类型/范围
rule_id 分片规则ID INTEGER
rule_name 分片规则名称 STRING
rule_column 分片字段名称 STRING
function_id 分片类型ID INTEGER
auto_generated 是否为计算节点自动生成的配置(1:自动生成,其他:非自动生成) INTEGER

例子:

mysql> show hotdb rules;
+---------+--------------------------------------------------+-------------+-------------+----------------+
| rule_id | rule_name                                        | rule_column | function_id | auto_generated |
+---------+--------------------------------------------------+-------------+-------------+----------------+
| 21      | AUTO_GENERATE_3_JOIN_A_JWY                       | ID          | 1           | 1              |
| 22      | hotdb-cloud_0374c02e-58a7-4263-9b80-9c5b46fb42af | id          | 5           | 0              |
| 25      | hotdb-cloud_f3979d19-93cb-4925-8dee-e4fbf8803c7c | id          | 5           | 0              |
| 32      | hotdb-cloud_6ccd2f69-cf53-4e81-ab3d-61345134fb7a | id          | 5           | 0              |
| 33      | hotdb-cloud_b5bc16e6-3481-40ed-83ff-e81d488e47a5 | ID          | 4           | 0              |
...省略更多...

例子:

mysql> show hotdb rules like '%auto%';
+---------+----------------------------+-------------+-------------+----------------+
| rule_id | rule_name                  | rule_column | function_id | auto_generated |
+---------+----------------------------+-------------+-------------+----------------+
| 21      | AUTO_GENERATE_3_JOIN_A_JWY | ID          | 1           | 1              |
| 50      | AUTO_GENERATE_9_FT_ADDR    | ID          | 26          | 1              |
| 64      | AUTO_GENERATE_23_S03       | A           | 1           | 1              |
| 65      | AUTO_GENERATE_23_S04       | B           | 1           | 1              |
...省略更多...mysql> show hotdb rules where rule_name like '%auto%';
+---------+----------------------------+-------------+-------------+----------------+
| rule_id | rule_name                  | rule_column | function_id | auto_generated |
+---------+----------------------------+-------------+-------------+----------------+
| 21      | AUTO_GENERATE_3_JOIN_A_JWY | ID          | 1           | 1              |
| 50      | AUTO_GENERATE_9_FT_ADDR    | ID          | 26          | 1              |
| 64      | AUTO_GENERATE_23_S03       | A           | 1           | 1              |
| 65      | AUTO_GENERATE_23_S04       | B           | 1           | 1              |
...省略更多...

暂时保留被删除的表数据

考虑到DROP TABLE、TRUNCATE TABLE 、DELETE TABLE 不带WHERE条件的语句在实际生产或线上环境执行时的较高风险,计算节点支持保留被DROP的表一段时间后再删除。其中,DELETE TABLE 不带WHERE条件的场景仅支持语句在自动提交的情况下可保留数据,事务内的操作暂无法保留数据。

可通过修改server.xml中的dropTableRetentionTime参数或在管理平台配置菜单下的计算节点参数配置中添加参数"被删除表保留时长(小时)"。

<property name="dropTableRetentionTime">0</property><!--被删除表保留时长,默认为0,不保留-->

dropTableRetentionTime参数默认为0,表示不保留被删除的表数据,例如DROP TABLE立即会删除表无法瞬间恢复;dropTableRetentionTime大于0时,单位以小时计算,保留被删除的表数据到设置时长,超过设置时长后自动删除被保留的表。

计算节点暂不提供还原被删除的表的直接命令,但是用户可以在存储节点通过RENAME的方式还原被删除的表。因直接在存储节点上进行操作,故此操作存在风险,请谨慎使用。风险包括还原后数据路由可能与实际路由不同、原有的外健和触发器被删除、父子表关系不存在等,详细风险参考还原注意事项。

当该功能开启时,以dropTableRetentionTime=24为例,将保留被DROP的表,24小时后删除被保留的表。若想要还原被DROP的表,首先查询计算节点配置库中的hotdb_dropped_table_log,查看被DROP的表的映射关系。例如:

mysql> select * from hotdb_dropped_table_log;
+------------+-----------+---------------------+------------------------------+
| table_name | datanodes | drop_time           | renamed_table_name           |
+------------+-----------+---------------------+------------------------------+
| TABLE25    | 11        | 2019-03-26 17:18:07 | HOTDB_TEMP_33_20190326171807 |
| TABLE30    | 11        | 2019-03-26 17:18:13 | HOTDB_TEMP_34_20190326171812 |
+------------+-----------+---------------------+------------------------------+
2 rows in set (0.00 sec)

其中,renamed_table_name即为保留被DROP的表的临时表,可以通过RENAME该临时表来还原数据。

RENAME TABLE tbl_name TO new_tbl_name

还原操作可以在对应的存储节点下分别RENAME临时表,也可以直接在计算节点下通过HINT语句RENAME临时表。

还原注意事项

还原时需要注意以下要点:

  • 通过管理平台配置后创建的表,可以直接RENAME成原表名。通过自动建表功能创建的表,DROP TABLE时不保留表配置,因此不能直接RENAME成原表名。
  • 还原自动建表创建的表可以通过在管理平台上添加配置后RENAME成该表表名。也就是说,还原操作允许通过RENAME表名,将被删除的表还原成任何在管理平台上已配置但未定义的表。
  • 若被删除的表引用的分片规则发生修改,或配置了不同的分片规则,还原后,数据不会按照新的分片规则自动迁移,即实际数据路由将与配置的路由不匹配。建议按照原来的分片规则配置还原,以防出现数据丢失或不一致的问题。
  • 若被删除的表上存在外键或触发器,DROP TABLE时将会在临时表中删除外键与触发器。有外键约束的表因外键被删除,还原后没有相关约束,以及有可能表内数据已经不再满足相关约束。
  • RENAME临时表的还原操作需要动态加载(reload)后才会生效。当前计算节点的动态加载功能在配置库有变更的情况下才生效,所以若除RENAME操作,配置库无其他变更,需要进行一些变更后,执行动态加载才会生效,生效后可查看到还原的表。

删除的表不进入表回收站

为方便用户在底层也能实现对表回收站的操作,以及可以不通过表回收站直接删除表数据,计算节点支持使用PURGE关键字的相关语句,使删除的表不进入表回收站。

  1. 删除表的PURGE语句

语法格式如下:

DROP TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CASCADE] [PURGE];

语法示例:

mysql> drop table test_table1 purge;
-- 删除表test_table1且不进入表回收站

语法说明:
删除表语句后缀增加PURGE后,此表在执行DROP语句后,已删除的数据不会进入到表回收站,优先级高于:开启表回收站(dropTableRetentionTime)

注意事项:

  • 允许写多个表名但不允许使用表别名,多个表之间用英文的逗号隔开。但不允许使用PURGE做表别名,报错如下:

在这里插入图片描述
在这里插入图片描述

  • 删除不存在的表,以及重复删除,报错如下:

在这里插入图片描述

  • 使用以上语句,必须具有DROP权限,否则报权限不足的提醒:

在这里插入图片描述

  1. 清空表数据的PURGE语句

语法格式如下:

TRUNCATE [TABLE] tbl_name [PURGE];

语法示例:

mysql>truncate table test_table1 purge;
-- 清空表test_table1且不进入表回收站

语法说明:
清空表语句后缀增加PURGE后,此表在执行TRUNCATE语句后,已删除的数据不会进入到表回收站,优先级高于:开启表回收站(dropTableRetentionTime)。

注意事项:

  • 不允许写多个表名,不允许使用表别名,报错如下:

在这里插入图片描述

  • 清空不存在的表,报错如下:

在这里插入图片描述

  • 重复清空无报错:

在这里插入图片描述

  • 要使用以上语句,必须具有CREATE权限,否则报权限不足的提醒:

在这里插入图片描述

  1. 彻底删除表数据的PURGE语句

语法格式如下:

DELETE PURGE FROM tbl_name [[AS] tbl_alias][PARTITION (partition_name [, partition_name] ...)][WHERE where_condition][ORDER BY ...][LIMIT row_count]

语法示例:

mysql>delete purge from test_database where gender='male'
-- 删除test_database表中gender等于male的记录,且不进入表回收站

语法说明:
在DELETE后直接加PURGE,此表在执行DELETE语句后,已删除的数据不会进入到表回收站,优先级高于:开启表回收站(dropTableRetentionTime)

注意事项:

  • 允许使用表别名,但不允许使用PURGE做表别名,报错如下:

在这里插入图片描述

  • 不允许写多个表名,报错如下:

在这里插入图片描述

  • 重复删除无报错:

在这里插入图片描述

  • 要使用以上语句,必须具有DELETE权限,否则报权限不足的提醒:

在这里插入图片描述

  1. 删除表回收站的数据的PURGE语句

语法格式如下:

[PURGE] [TABLE] tbl_name;

语法示例:

mysql> purge table test_1;
-- 删除表回收站中有关表test_1的全部记录

语法说明:
将表回收站中的表删除,只要是和删除的表相关的记录(如TRUNCATE、DROP、DELETE等)均会被删除;。 此tbl_name名,对应的是通过SHOW RECYCLED TABLES;查出来的原表名,非表临时名;
在这里插入图片描述
注意事项:

  • 不允许写多个表名,不允许使用表别名,报错如下:

在这里插入图片描述

  • 要使用以上语句,必须具有DELETE权限,否则报权限不足的提醒:

在这里插入图片描述

  • 删除表回收站不存在的表,以及重复删除,报错如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/843334.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows Cmd查询端口号对应的进程及关闭进程

Windows Cmd查询端口号对应的进程及关闭进程 1. 使用 netstat 查询端口和进程信息 运行以下命令: netstat -ano | findstr :端口号示例: 如果要查询端口 80812. 查找进程 ID 所属的程序 通过上面命令的输出获取到 PID(进程 ID)后,可以使用以下命令查看对应的程序名称: ta…

hhdb数据库介绍(9-16)

SQL语法支持 事务管理与锁语句语句类型 事务语句 语句参数 状态 说明事务管理 START TRANSACTION 无参数 支持WITH CONSISTENT SNAPSHOT 支持READ WRITE 支持READ ONLY 支持BEGIN支持COMMIT支持COMMIT [AND [NO] CHAIN] [[NO] RELEASE] 支持ROLLBACK支持ROLLBACK [AND [NO] CHA…

MySQL_索引失效_类型转换

1.类型转换索引失效场景SELECT * FROM tbl_name WHERE str_col=1; 列str_col上有建立索引,一个字符串类型的列给一个整数类型的值。 问题:为什么会导致索引失效? 原因:MySQL官方文档解释:The reason for this is that there are many different strings that may convert …

Thinkpad X1 Tablet gen2 键盘改USB

0 写在前面 前文Thinkpad X1 Tablet gen2 键盘固件逆向实现Ctrl与Fn换位记录了Thinkpad X1 Tablet gen2 键盘Fn和Ctrl换位的研究过程,本文记录一下该键盘改USB的过程。因为操作的时候没有留太多照片,所以尽量画图示意。 0.1 其他网友硬改成果 在硬改该键盘之前,在网上发现其…

2024年不同行业都适用的10款项目管理工具推荐,总有一款适合你!

在当今快节奏的商业环境中,项目管理工具的选择对于项目的成功至关重要。不同的行业和项目类型需要不同的工具来满足其特定的需求。本文将介绍10款适用于不同行业的项目管理工具,帮助您在2024年找到最适合您项目的解决方案。 禅道项目管理软件 禅道项目管理软件是一款开源的项…

多模态遥感技术:智慧城市更新与表达的新路径

随着智慧城市建设的不断深入,多模态航空遥感技术正成为推动城市智慧化的关键力量。多模态航空遥感通过集成多种传感器和数据源,提供了丰富的地表信息,极大地提升了城市空间数据的准确性和应用价值。多模态航空遥感技术多模态航空遥感技术利用多种传感器,如全色相机、多光谱…

H5-9 表格

1、表格展示效果表格在数据展示方便面非常简单,并且表现优秀 2、表格组成与特点 行、列、单元格 单元格特点:通行等高、同列等宽。 3、表格标签表格:<table>行:<tr>列:<td> <table><tr><td>1</td><td>1</td>&l…

带CSS3动画效果的炫酷jquery返回顶部插件

gototop是一款轻量级、简单易用的jquery返回顶部插件。该jquery返回顶部插件在用户向下滚动页面一段距离之后,会以CSS3动画方式出现返回顶部按钮。点击返回顶部按钮之后,页面以平滑的方式滚动回顶部。在线演示 下载使用方法 在页面中引入jquery、jquery.gototop.min.js文件。…

基本分段存储管理方式

基本分段存储管理方式 前言:分段与分页基本类似,理解了分页此处不难 ​​ ‍一、分段 进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名(在低级语言中,程序员使用段名来编程),每段从 0 开始编址。 内存分配规则:以段为单位进行分配,每个段在…

Java反序列化 - CC6链 (代码审计)

一、漏洞简述: 相比较于CC6链,CC1链对jdk版本有较多的限制。 在 jdk_8u71版本之后,AnnotationInvocationHandler类中的readObject方法代码被修改,移除了原有的 setValue()方法,导致利用链断开。 jdk_8u65:jdk_8u71:二、CC6链分析: 1、利用逻辑: Hashmap.readObject() …

不透明的文档协作,正在毁掉你的团队效率

在团队协作中,我们经常面对这样的困境:多人编辑同一份文档时,如何确保内容的准确性和版本的一致性?这看似简单的问题,却常常导致效率低下、信息丢失,甚至团队内部的矛盾升级。 关键点在于“变更透明化与实时同步”。 传统方式依赖邮件传输或者分散的云存储,这不仅容易造…

工地渣土车AI智能识别管控系统

工地渣土车AI智能识别管控系统通过现场监控摄像头实时捕捉工地出入口的画面,工地渣土车AI智能识别管控系统能够准确识别出渣土车,判断其是否按规定进行了遮盖,一旦系统判定渣土车未按规定遮盖,立即触发警报并抓拍照片,能够及时将违规行为报告发送至企业平台。工地渣土车AI…