首页 > 数据库 >hhdb数据库介绍(9-18)

hhdb数据库介绍(9-18)

时间:2024-11-29 11:10:33浏览次数:7  
标签:function name 18 数据库 mysql 节点 分片 hhdb id

SQL语法支持

计算节点语法特殊功能

默认分片规则建表

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

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

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

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

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

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

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

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

例子:

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

mysql> use TEST001;
Database changed

mysql> 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 changed

mysql> 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 2

mysql> 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权限,否则报权限不足的提醒:

在这里插入图片描述

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

在这里插入图片描述

标签:function,name,18,数据库,mysql,节点,分片,hhdb,id
From: https://www.cnblogs.com/henghuixinda/p/18576164

相关文章

  • 【数据库设计】ER图,关系属性 是属于哪个实体的
    在ER图(实体-关系图)中,关系属性通常属于**关系(Relationship)**本身,而不是某一个具体的实体(Entity)。关系属性用于描述两个或多个实体之间关系的特征或附加信息。1.关系属性的概念:关系属性是与关系(即菱形)相关的属性,而不是直接隶属于某个单独的实体。它描述的是关系本身的特......
  • 面试官:为什么数据库连接池不采用 IO 多路复用?
    今天我们聊一个不常见的Java面试题:为什么数据库连接池不采用IO多路复用?这是一个非常好的问题。IO多路复用被视为是非常好的性能助力器。但是一般我们在使用DB时,还是经常性采用c3p0,tomcatconnectionpool等技术来与DB连接,哪怕整个程序已经变成以Netty为核心。这到底......
  • 11-29大型数据库实验
    实验内容与完成情况:MySQL操作Shell命令操作sql复制代码--创建Student表CREATETABLEStudent(   NameVARCHAR(50),   EnglishINT,   MathINT,   ComputerINT); --插入数据INSERTINTOStudentVALUES('zhangsan',69,86,77),('lisi',......
  • Python知识分享第十三天-数据库介绍
    一、数据库概述1、数据库介绍数据库就是存储数据的仓库,其本质是一个文件系统,按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。随着互联网的高速发展,大量的数据在不断的产生,伴随而来的是如何高效安全的存储数据和处理数据,而这一问题成......
  • 软件设计:实验18:迭代器模式
    实验18:迭代器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解迭代器模式的动机,掌握该模式的结构;2、能够利用迭代器模式解决实际问题。 [实验任务一]:JAVA和C++常见数据结构迭代器的使用信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA......
  • asp.net程序设计2618航空售票管理系统(三层架构)【源码+讲解视频】机票预订系统
    项目包含:源码、参考论文、讲解视频、说明文档,部署录像开发环境开发工具:VisualStudio2010或以上版本数据库:SQLServer2005或以上版本开发语言:c#操作系统:windows7或以上浏览器:GoogleChrome(推荐)、Edge、360浏览器随着信息技术的发展,航空售票业也成为一个高度依赖......
  • MAT188 principal components
    MAT188:Homework5BackgroundBelowisanillustrationofthesouthwesternportionofthegreatprovinceofBritishColumbia.Citiesarelabelledinblue,andredcirclesindicatethelocationofpublicweathertations.Includedwiththisassignmentiste......
  • 【C++动态规划 贪心】3180. 执行操作可获得的最大总奖励 I|1848
    本文涉及知识点C++贪心C++动态规划LeetCode3180.执行操作可获得的最大总奖励I给你一个整数数组rewardValues,长度为n,代表奖励的值。最初,你的总奖励x为0,所有下标都是未标记的。你可以执行以下操作任意次:从区间[0,n-1]中选择一个未标记的下标i。如果......
  • 国标GB28181-2016平台LiteGBS国标GB28181设备管理平台摄像机IP地址丢失怎么办?
    在LiteGBS国标GB28181设备管理软件中,摄像机IP地址是连接和管理监控设备的关键信息。正确配置和维护IP地址对于确保视频监控系统的稳定性和可靠性至关重要。如果摄像机的IP地址出现问题,可能会导致监控画面无法访问、设备无法远程管理等状况,从而影响到整个监控系统的效能。因此,了解......
  • Springboot高校学籍档案管理p84mw(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,班级信息,专业信息,学院信息,学生成绩,档案文件开题报告内容一、研究背景及意义随着高校规模的不断扩大和信息化建设的推进,学籍档案管理工作面临着越来越......