hhdb数据库介绍(9-21)

计算节点参数说明

checkClusterBeforeDnSwitch

参数说明:

PropertyValue
参数值checkClusterBeforeDnSwitch
是否可见
参数说明集群模式下触发数据节点高可用切换时,是否先判断集群所有成员正常再进行数据节点切换
默认值false
Reload是否生效

参数设置:

<property name="checkClusterBeforeDnSwitch">false</property><!--集群模式下触发数据节点高可用切换时,是否先判断集群所有成员正常再进行数据节点切换-->

参数作用:

控制节点切换前是否先判断集群所有成员都能ping通,true开启false关闭。 例:A机房和B机房构成双活集群,A机房3个计算节点,B机房2个计算节点,primary节点在B机房。AB机房网络隔离后,A机房做为多数派会选出主,B机房无法形成多数派而cluster shutdown,但是在B机房primary未下线时,收到A机房主存储节点的心跳超时导致存储节点发生切换(开启此参数可避免此类情况)。

checkConnLastUsedTime

参数说明:

PropertyValue
参数值checkConnLastUsedTime
是否可见
参数说明后端连接最后一次使用最大允许间隔时间,超过将校验该连接是否有效 单位:毫秒
默认值3000
最小值0
最大值600000
Reload是否生效

参数设置:

<property name="checkConnLastUsedTime">false</property><!-- 后端连接最后一次使用最大允许间隔时间,超过将校验该连接是否有效 单位:毫秒 -->

参数作用:

后端连接超过此参数配置的时长没有被使用过,计算节点从连接池获取连接时会先校验该连接的连通性,保证获取到的连接可用。

mysql> show @@session;

+-------+---------+-------------+----------+-----------+----------+---------+---------+-------+------------+----------+-----------+---------------+---------+---------+-------+----------+-------------------+--------------------+
| id    | running | trx_started | trx_time | trx_query | bk_count | bk_dnid | bk_dsid | bk_id | bk_mysqlid | bk_state | bk_closed | bk_autocommit | bk_host | bk_port | bk_db | bk_query | bk_last_read_time | bk_last_write_time |
+-------+---------+-------------+----------+-----------+----------+---------+---------+-------+------------+----------+-----------+---------------+---------+---------+-------+----------+-------------------+--------------------+
| 60615 | FALSE   | NULL        | NULL     | NULL      | 0        | NULL    | NULL    | NULL  | NULL       | NULL     | NULL      | NULL          | NULL    | NULL    | NULL  | NULL     | NULL              | NULL               |
+-------+---------+-------------+----------+-----------+----------+---------+---------+-------+------------+----------+-----------+---------------+---------+---------+-------+----------+-------------------+--------------------+
1 row in set (0.00 sec)

checkConnValid

参数说明:

PropertyValue
参数值checkConnValid
是否可见
参数说明是否检查后端连接有效
默认值true
Reload是否生效

参数设置:

server.xml中手动添加一条checkConnValid的配置

<property name="CheckConnValid">true</property>

参数作用:

从连接池获取连接的时候检查连接的可用性,如有不可用的连接会关闭连接,从连接池清除。

checkConnValidTimeout

参数说明:

PropertyValue
参数值checkConnValidTimeout
是否可见
参数说明后端连接有效校验时,最大超时时间 单位:毫秒
默认值500
Reload是否生效

参数设置:

<property name="checkConnValidTimeout">500</property><!-- 后端连接有效校验时,最大超时时间 单位:毫秒 -->

参数作用:

后端连接有效校验时,当检测时间超过"后端连接超时时间",则判断为无效的连接,当检测后端连接属于超时连接时,会把该连接从连接池中清除。

checkMySQLParamInterval

参数说明:

PropertyValue
参数值checkMySQLParamInterval
是否可见
参数说明检查存储节点参数设置 间隔时间(单位:毫秒)
默认值600000
最小值1000
最大值86400000
Reload是否生效Y

参数设置:

<property name="checkMySQLParamInterval">60000</property><!-- 检查存储节点参数设置是否合理的间隔时间(单位:毫秒) -->

参数作用:
检查存储节点参数设置是否合理的间隔时间。其中,检查参数包括:completion_type、innodb_rollback_on_timeout、div_precision_increment、autocommit、read_only、tx_isolation、max_allowed_packet。

checkQueryIndexTimeMs

参数说明:

PropertyValue
参数值checkQueryIndexTimeMs
是否可见
参数说明检测SQL查询是否走上索引等待时间,单位毫秒
默认值0
最小值0或200(ms)
最大值3600000(ms)
Reload是否生效

参数设置:

<property name="checkMySQLParamInterval">0</property><!-- 检测SQL查询是否走上索引等待时间,单位毫秒 -->

参数作用:
检测SQL查询是否走上索引等待时间。若SQL在存储节点执行时间超过该值,则检查该SQL是否走上了索引,若未走上索引,则客户端发起的查询进入流控规则,若走上索引,则不处理。默认为0表示不检查,非0时最小值为200(ms)。

示例如下:

在server.xml设置highCostSqlConcurrency=10,checkQueryIndexTimeMs=200并执行如下步骤。

  1. 创建表
create table setl_d (emp_no varchar(50), emp_name varchar(50), emp_type varchar(50), psn_no varchar(50), psn_name varchar(50), certno varchar(50), GEND varchar(50), brdy varchar(50), MEDFEE_SUMAMT decimal(10,2), hifp_pay decimal(10,2), OTHFUND_PAY decimal(10,2), MDTRT_ID varchar(50), VALI_FLAG varchar(50), MED_TYPE varchar(50), REFD_SETL_FLAG varchar(50), pay_loc varchar(50));
  1. 使用sysbench插入1000万行数据
rs = db_query("insert into setl_d values ('SW"..math.random(1,9999999999).."','省委"..math.random(1,9999999999).."','A1','SF"..math.random(10000000,99999999).."','张三"..math.random(1,9999999999).."','"..math.random(100000,999999)..math.random(1949,2013)..math.random(1001,1231)..math.random(1000,9999).."','"..math.random(1,9).."','"..math.random(1949,2013).."-0"..math.random(1,9).."-0"..math.random(1,9).."','"..math.random(1000,9999)..".11','"..math.random(1000,9999)..".55','"..math.random(1000,9999)..".11','fix-ak"..math.random(1000,9999).."-"..math.random(1000,9999).."','"..math.random(1,9).."','"..math.random(1,100).."','"..math.random(1,9).."','"..math.random(1,9).."')")
  1. 使用sysbench压测15并发的select * from setl_d where psn_no like ‘%1~9999随机值%’;
  2. 由于上述select语句未使用索引且执行时间超过了200ms,故该查询会匹配流控规则,在3325端口执行show @@flowcontrol_connection命令可见流控信息如下所示:
root@127.0.0.1:(none) 8.0.32 11:10:09> show @@flowcontrol_connection;
+------+------+-----------------+-------+------+------------------+---------------+------------+--------------------------------------------------+
| id   | user | host            | db    | time | state            | type          | crc32      | info                                             |
+------+------+-----------------+-------+------+------------------+---------------+------------+--------------------------------------------------+
|  432 | root | 127.0.0.1:47318 | SBDEV |    1 | Writing to net   | executing     | 3685623056 | select * from setl_d  where psn_no like '%3814%' |
|  419 | root | 127.0.0.1:47292 | SBDEV |    5 | Writing to net   | executing     | 3685623056 | select * from setl_d  where psn_no like '%4957%' |
|  421 | root | 127.0.0.1:47295 | SBDEV |    2 | Sending data     | executing     | 3685623056 | select * from setl_d  where psn_no like '%9851%' |
|  422 | root | 127.0.0.1:47298 | SBDEV |    1 | Writing to net   | executing     | 3685623056 | select * from setl_d  where psn_no like '%9919%' |
|  423 | root | 127.0.0.1:47300 | SBDEV |    1 | Writing to net   | executing     | 3685623056 | select * from setl_d  where psn_no like '%4442%' |
|  424 | root | 127.0.0.1:47302 | SBDEV |    1 | Writing to net   | executing     | 3685623056 | select * from setl_d  where psn_no like '%4857%' |
|  427 | root | 127.0.0.1:47308 | SBDEV |    2 | Writing to net   | executing     | 3685623056 | select * from setl_d  where psn_no like '%5554%' |
|  428 | root | 127.0.0.1:47310 | SBDEV |    2 | Writing to net   | executing     | 3685623056 | select * from setl_d  where psn_no like '%5166%' |
|  430 | root | 127.0.0.1:47314 | SBDEV |    4 | Writing to net   | executing     | 3685623056 | select * from setl_d  where psn_no like '%5718%' |
|  431 | root | 127.0.0.1:47316 | SBDEV |    3 | Writing to net   | executing     | 3685623056 | select * from setl_d  where psn_no like '%8693%' |
|  429 | root | 127.0.0.1:47312 | SBDEV |    2 | Flow control sql | flowcontroled | 3685623056 | select * from setl_d  where psn_no like '%6729%' |
|  425 | root | 127.0.0.1:47304 | SBDEV |    1 | Flow control sql | flowcontroled | 3685623056 | select * from setl_d  where psn_no like '%1238%' |
|  420 | root | 127.0.0.1:47294 | SBDEV |    0 | Flow control sql | flowcontroled | 3685623056 | select * from setl_d  where psn_no like '%4698%' |
|  418 | root | 127.0.0.1:47290 | SBDEV |    1 | Flow control sql | flowcontroled | 3685623056 | select * from setl_d  where psn_no like '%8259%' |
|  426 | root | 127.0.0.1:47306 | SBDEV |    0 | Flow control sql | flowcontroled | 3685623056 | select * from setl_d  where psn_no like '%8793%' |
+------+------+-----------------+-------+------+------------------+---------------+------------+--------------------------------------------------+
15 rows in set (0.00 sec)
5、同时在3325端口执行show @@debug可见highCostSqlConcurrency已被占满,即join_limit列10-10
root@127.0.0.1:(none) 8.0.32 11:11:53> show @@debug;
+------------+------------+------------------------------------------------------------------------------------------------------------------------------------+--------------------+---------------+
| join_limit | committing | processconcounter                                                                                                                  | dbunavailablecount | clusterstatus |
+------------+------------+------------------------------------------------------------------------------------------------------------------------------------+--------------------+---------------+
|      10-10 |          0 | ,0:1,1:1,2:1,3:1,4:1,5:0,6:0,7:1,8:1,9:0,10:0,11:0,12:0,13:1,14:0,15:0,16:1,17:0,18:0,19:0,20:1,21:0,22:0,23:0,24:0,25:0,26:0,27:0 |                    | NULL          |
+------------+------------+------------------------------------------------------------------------------------------------------------------------------------+--------------------+---------------+
1 row in set (0.00 sec)

checkUpdate

参数说明:

PropertyValue
参数值checkUpdate
是否可见
参数说明是否拦截对分片字段的更新操作
默认值true
Reload是否生效

参数设置:

<property name="checkUpdate">true</property><!-- 是否拦截对分片字段的更新操作(The update operation of Sharding Key intercepted or not) -->

参数作用:
控制是否允许修改分片字段。设置为true的情况,同节点内可以更新,不能更新分片字段路由到不同节点的 ,如跨节点分片字段更新会有如下提示:

mysql> update ss set id=13 where a='aa';
ERROR 10217 (HY000): update sharding column's value can't change dn.

设置为false的情况,更新分片字段可以随意更新,且更新后的数据会自动根据分片规则进行重分配。

mysql> update ss set id=13 where a='aa';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from ss where a='aa';
+----+----+
| id | a  |
+----+----+
| 13 | aa |
+----+----+
1 row in set (0.00 sec)

clusterElectionTimeoutMs

参数说明:

PropertyValue
参数值clusterElectionTimeoutMs
是否可见
参数说明集群选举超时时间(ms)
默认值2000
Reload是否生效

参数设置:

<property name="clusterElectionTimeoutMs">2000</property><!-- 集群选举超时时间(ms) -->

参数作用:
该参数用于设置计算节点集群选举超时时间,一般不建议修改,可根据实际网络质量情况进行适度调整。例如将参数clusterElectionTimeoutMs设置为2000ms,则集群中的主计算节点发生故障后,新的候选节点会在超时时间内一直等待选举,直至选举成功或超过2000ms选举失败。

clusterHeartbeatTimeoutMs

参数说明:

PropertyValue
参数值clusterHeartbeatTimeoutMs
是否可见
参数说明集群心跳超时时间(ms)
默认值5000
Reload是否生效

参数设置:
server.xml中clusterHeartbeatTimeoutMs参数配置 如下配置:

<property name="clusterHeartbeatTimeoutMs">5000</property><!-- 集群心跳超时时间(ms) -->

参数作用:
该参数用于设置计算节点集群心跳超时时间,一般不建议修改,可根据实际网络质量情况进行适度调整。当正在执行DDL时,跳过不执行心跳逻辑。

clusterHost

参数说明:

PropertyValue
参数值clusterHost
是否可见
参数说明本节点所在IP
默认值192.168.200.1
Reload是否生效

参数设置:
server.xml中clusterHost参数配置 如下配置:

<property name="clusterHost">192.168.200.1</property><!-- 本节点所在IP -->

参数作用:
该参数需设置和实际计算节点所在的IP一致(不能用127.0.0.1代替),集群选举时该计算节点用于与其他计算节点通信的地址。

clusterName

参数说明:

PropertyValue
参数值clusterName
是否可见
参数说明集群组名称
默认值HotDB-Cluster
Reload是否生效

参数设置:
server.xml中clusterName参数配置 如下配置:

<property name="clusterName">HotDB-Cluster</property><!-- 集群组名称 -->

参数作用:
指定集群启动后加入的组名称,同一个集群内的计算节点的该参数必须相同,不同集群的计算节点的该参数必须设置不同。

clusterNetwork

参数说明:

PropertyValue
参数值clusterNetwork
是否可见
参数说明集群所在网段
默认值192.168.200.0/24
Reload是否生效

参数设置:
server.xml中clusterNetwork参数配置 如下配置:

<property name="clusterNetwork">192.168.200.0/24</property><!-- 集群所在网段 -->

参数作用:
该参数为整个集群所在的网段,限定集群内的所有计算节点IP必须在该网段内。否则即使集群组相同启动后也不会加入集群。

clusterPacketTimeoutMs

参数说明:

PropertyValue
参数值clusterPacketTimeoutMs
是否可见
参数说明集群间通讯包失效时间(ms)
默认值5000
Reload是否生效

参数设置:
server.xml中clusterPacketTimeoutMs参数配置 如下配置:

<property name="clusterPacketTimeoutMs">5000</property><!-- 集群间通讯包失效时间(ms) -->

参数作用:
该参数用于设置集群间通讯包失效时间,一般不建议修改,可根据实际网络质量情况进行适度调整。集群间通讯包指在集群正常运行时需要发送的所有点对点的通讯包,包括且不限于心跳、选举、成员变更等数据包。

clusterPort

参数说明:

PropertyValue
参数值clusterPort
是否可见
参数说明集群通信端口
默认值3326
Reload是否生效

参数设置:
server.xml中clusterPort参数配置 如下配置:

<property name="clusterPort">3326</property><!-- 集群通信端口 -->

参数作用:
默认值3326,指定监听集群信息的端口。该参数用于集群内通讯,同一集群通信的端口必须相同。

clusterRole

参数说明:

PropertyValue
参数值clusterRole
是否可见
参数说明计算节点集群当前角色
默认值0
Reload是否生效

参数设置:
server.xml中clusterRole参数配置 如下配置:

<property name="clusterRole">0</property><!-- 计算节点集群当前角色 -->

参数作用:
目前集群模式下的计算节点,如果宕机到最后一个计算节点故障之前, 其他计算节点若均是一起故障(不是先后故障),则整个集群可能都是故障状态。为了减少发生这类问题的概率,新增了clusterRole参数,该参数为计算节点在集群内的角色配置参数,配置为0代表普通角色、配置为1代表仅参与选举投票的角色。仅参与选举投票的角色在成为集群内最后一个节点前不提供服务,可将其单独与实际集群计算节点配置在同一集群内,可保证集群内只要计算节点多数存活即可提供服务。

clusterSize

参数说明:

PropertyValue
参数值clusterSize
是否可见
参数说明集群中节点总数
默认值3
Reload是否生效

参数设置:
server.xml中clusterSize参数配置 如下配置:

<property name="clusterSize">3</property><!-- 集群中节点总数 -->

参数作用:
该参数为集群内计算节点的总个数,若haMode设置为1(即集群模式),需配置成该集群的实际计算节点数。

clusterStartedPacketTimeoutMs

参数说明:

PropertyValue
参数值clusterStartedPacketTimeoutMs
是否可见
参数说明集群Started广播包失效时间(ms)
默认值5000
Reload是否生效

参数设置:
server.xml中clusterStartedPacketTimeoutMs参数配置 如下配置:

<property name="clusterStartedPacketTimeoutMs">5000</property><!-- 集群Started广播包失效时间(ms) -->

参数作用:
该参数用于设置集群Started广播包失效时间,一般不建议修改,可根据实际网络质量情况进行适度调整。集群Started广播包是指在集群启动时的一个针对网段广播的包。

columnPrivilegeDenied

参数说明:

PropertyValue
参数值columnPrivilegeDenied
是否可见
参数说明控制表中的列拒绝权限,优先级高于其他权限
默认值(空)
Reload是否生效

参数设置:

<property name="columnPrivilegeDenied">列拒绝权限内容</property><!--控制表中的列拒绝权限,优先级高于其他权限,默认为空-->

内容格式:

‘user_name’@‘host_name’.logicDB.tableName[privilegeType(columnName,columnName)];‘user_name’@‘host_name’.logicDB.tableName[privilegeType(columnName,columnName),privilegeType(columnName,columnName)];....

详细说明:

  • ‘user_name’@‘host_name’:由用户名+主机名组成,可以填写具体用户(例如‘zhangsan’@‘127.0.0.1’或‘lisi’@‘%‘或‘wangwu’@‘192.168.210.129’),也可以填写*(代表所有用户);
  • logicDB:逻辑库名,可以填写具体逻辑库(例如hotdb),也可以填写*(代表所有逻辑库);
  • tableName:表名,可以具体表(例如sbtest1),也可以填写*(代表所有表);
  • privilegeType:权限类型,列权限目前可控制类型包括:INSERT,SELECT,UPDATE(不区分大小写),可以只填写一种权限类型,也可以填写多种权限类型,两种权限类型之间用,隔开;
  • columnName:列名 ,若是主键字段可以使用“PRIMARY”代替,若是唯一键字段可以使用“UNIQUE”代替。同一个权限类型下可以只填写一个列名,也可以填写多个列名,两个列名之间用,隔开;
  • 为了保证能够被识别和分类,采用.,;符号间隔;
  • 当配置的列拒绝权限生效后,执行SQL涉及被控制的列时,不符合权限要求的有错误提示,同时hotdb.log会输出相应日志信息;
  • 用户可通过服务端口执行show hotdb grants查看被拒绝的列权限类型;

示例1: 不允许用户‘ztm’@‘192.168.210.129’对逻辑库d1中sbtest1表的c列有select权限

以OLTP场景标准表sbtest1为例,则可配置:

<property name="columnPrivilegeDenied">'ztm'@'192.168.210.129'.d1.sbtest1[select(c)]</property><!--控制表中的列拒绝权限,优先级高于其他权限-->

动态加载成功后,立即生效,在服务端口执行sql验证:

ztm@192.168.210.130:(none) 5.7.25 01:37:23> use d1
Database changed
ztm@192.168.210.130:d1 5.7.25 02:20:37> select c from sbtest1;
ERROR 1143 (HY000): SELECT command denied to user 'ztm'@'192.168.210.129' for column 'c' in table 'sbtest1'
ztm@192.168.210.130:d1 5.7.25 02:22:33> show grants for 'ztm'@'192.168.210.129';
+-----------------------------------------------------------+
| Grants for ztm                                            |
+-----------------------------------------------------------+
| 'ztm'@'192.168.210.129'.d1.sbtest1[select(c)]             |
+-----------------------------------------------------------+

此时hotdb.log会输出相应内容:

2021-06-25 14:22:33.465 [INFO] [SQL] [$NIOExecutor-1-2] cn.hotpu.hotdb.server.b(1140) - Error in SQL:[select c from sbtest1] from connection:[[thread=$NIOExecutor-1-2,id=702,user=ztm,host=192.168.210.129,port=3323,localport=47832,schema=D1,[{_os:linux-glibc2.12}, {_client_name:libmysql}, {_pid:32094}, {_client_version:5.7.25}, {_platform:x86_64}, {program_name:mysql}]]] cn.hotpu.hotdb.b.c: 1143: SELECT command denied to user 'ztm'@'192.168.210.129' for column 'c' in table 'sbtest1'
2021-06-25 14:22:33.466 [INFO] [HOTDBERROR] [Unusual-Logger-1] cn.hotpu.hotdb.server.b(286) - sql: select c from sbtest1, err: SELECT command denied to user 'ztm'@'192.168.210.129' for column 'c' in table 'sbtest1' from connection [thread=Unusual-Logger-1,id=702,user=ztm,host=192.168.210.129,port=3323,localport=47832,schema=D1,[{_os:linux-glibc2.12}, {_client_name:libmysql}, {_pid:32094}, {_client_version:5.7.25}, {_platform:x86_64}, {program_name:mysql}]]

示例2: 不允许用户‘ztm’@‘%'对逻辑库d1中sbtest1表主键所在列有select、insert、update权限

以OLTP场景标准表sbtest1为例,则可配置:

<property name="columnPrivilegeDenied">'ztm'@'%'.d1.sbtest1[select(id),insert(_primary_),update(_unique_)]</property><!--控制表中的列拒绝权限,优先级高于其他权限-->

由于sbtest1表中id既是主键,也是唯一键,故可以使用_primary_或者_unique_来表示。动态加载成功后,立即生效,在服务端口执行sql验证:

ztm@192.168.210.130:(none) 5.7.25 01:47:10> use d1
Database changed
ztm@192.168.210.130:d1 5.7.25 01:47:17> select id from sbtest1;
ERROR 1143 (HY000): SELECT command denied to user 'ztm'@'%' for column 'id' in table 'sbtest1'
ztm@192.168.210.130:d1 5.7.25 01:47:49> insert into sbtest1(id) values(1000);
ERROR 1143 (HY000): INSERT command denied to user 'ztm'@'%' for column 'id' in table 'sbtest1'
ztm@192.168.210.130:d1 5.7.25 01:48:16> update sbtest1 set id=id+1 where k=1;
ERROR 1143 (HY000): UPDATE command denied to user 'ztm'@'%' for column 'id' in table 'sbtest1'

示例3: 不允许用户‘ztm’@‘127.0.0.1’对逻辑库d1中sbtest1表所有列有select、insert、update权限,不允许用户‘root’@‘%‘对逻辑库d2中sbtest4表所有列有select、insert、update权限,不允许用户‘ztm’@‘192.168.210.129’对逻辑库d3中sbtest8表所有列有select、insert、update权限

以OLTP场景标准表sbtest1~sbtest10为例,则可配置:

<property name="columnPrivilegeDenied">'ztm'@'127.0.0.1'.d1.sbtest1[select(id,k,c,pad),insert(_primary_,k,c,pad),update(_unique_,k,c,pad)];'root'@'%'.d2.sbtest4[select(id,k,c,pad),insert(_primary_,k,c,pad),update(_unique_,k,c,pad)];'ztm'@'192.168.210.129'.d3.sbtest8[select(id,k,c,pad),insert(_primary_,k,c,pad),update(_unique_,k,c,pad)]</property><!--控制表中的列拒绝权限,优先级高于其他权限-->

由于sbtest1表中id既是主键,也是唯一键,故可以使用_primary_或者_unique_来表示。动态加载成功后,立即生效,在服务端口执行sql验证:

root@127.0.0.1:(none) 5.7.25 02:01:10> use d2
Database changed
root@127.0.0.1:d2 5.7.25 02:01:20> select id from sbtest4;
ERROR 1143 (HY000): SELECT command denied to user 'root'@'%' for column 'id' in table 'sbtest4'
root@127.0.0.1:d2 5.7.25 02:01:25> select k from sbtest4;
ERROR 1143 (HY000): SELECT command denied to user 'root'@'%' for column 'k' in table 'sbtest4'
root@127.0.0.1:d2 5.7.25 02:01:43> select c from sbtest4;
ERROR 1143 (HY000): SELECT command denied to user 'root'@'%' for column 'c' in table 'sbtest4'
root@127.0.0.1:d2 5.7.25 02:01:47> select pad from sbtest4;
ERROR 1143 (HY000): SELECT command denied to user 'root'@'%' for column 'pad' in table 'sbtest4'
root@127.0.0.1:d2 5.7.25 02:01:52> insert into sbtest4 values(10000,88,uuid(),uuid());
ERROR 1143 (HY000): INSERT command denied to user 'root'@'%' for column 'id' in table 'sbtest4'
root@127.0.0.1:d2 5.7.25 02:02:16> insert into sbtest4(id) values(10000);
ERROR 1143 (HY000): INSERT command denied to user 'root'@'%' for column 'id' in table 'sbtest4'
root@127.0.0.1:d2 5.7.25 02:02:44> insert into sbtest4(k) values(88);
ERROR 1143 (HY000): INSERT command denied to user 'root'@'%' for column 'k' in table 'sbtest4'
root@127.0.0.1:d2 5.7.25 02:02:53> insert into sbtest4(c) values(uuid());
ERROR 1143 (HY000): INSERT command denied to user 'root'@'%' for column 'c' in table 'sbtest4'
root@127.0.0.1:d2 5.7.25 02:03:02> insert into sbtest4(pad) values(uuid());
ERROR 1143 (HY000): INSERT command denied to user 'root'@'%' for column 'pad' in table 'sbtest4'

示例4: 不允许所有用户对所有逻辑库中所有表pad列有select、insert、update权限

以OLTP场景标准表sbtest1~sbtest10为例,则可配置:

<property name="columnPrivilegeDenied">*.*.*[select(pad),insert(pad),update(pad)]</property><!--控制表中的列拒绝权限,优先级高于其他权限-->

动态加载成功后,立即生效,在服务端口执行sql验证:

ztm@192.168.210.130:(none) 5.7.25 02:09:01> use d1;
Database changed
ztm@192.168.210.130:d1 5.7.25 02:09:11> select pad from sbtest1;
ERROR 1143 (HY000): SELECT command denied to user 'ztm'@'192.168.210.129' for column 'pad' in table 'sbtest1'
ztm@192.168.210.130:d1 5.7.25 02:09:21> select pad from sbtest2;
ERROR 1143 (HY000): SELECT command denied to user 'ztm'@'192.168.210.129' for column 'pad' in table 'sbtest2'
ztm@192.168.210.130:d1 5.7.25 02:09:25> select pad from sbtest3;
ERROR 1143 (HY000): SELECT command denied to user 'ztm'@'192.168.210.129' for column 'pad' in table 'sbtest3'
ztm@192.168.210.130:d1 5.7.25 02:09:28> select pad from d2.sbtest4;
ERROR 1143 (HY000): SELECT command denied to user 'ztm'@'192.168.210.129' for column 'pad' in table 'sbtest4'
ztm@192.168.210.130:d1 5.7.25 02:09:40> insert into sbtest3(pad) values(uuid());
ERROR 1143 (HY000): INSERT command denied to user 'ztm'@'192.168.210.129' for column 'pad' in table 'sbtest3'
ztm@192.168.210.130:d1 5.7.25 02:10:07> update sbtest2 set pad=uuid() where id=1;
ERROR 1143 (HY000): UPDATE command denied to user 'ztm'@'192.168.210.129' for column 'pad' in table 'sbtest2'

compatibleWithChinesePunctuation

参数说明:

PropertyValue
参数值compatibleWithChinesePunctuation
是否可见
参数说明是否兼容语句中使用中文标点
默认值false
Reload是否生效

参数设置:

<property name="compatibleWithChinesePunctuation">false</property><!-- 是否兼容语句中使用中文标点 -->

参数作用:
开启后,支持如下中文标点:左括号、右括号、逗号、冒号、分号、问号、感叹号,以上标点仅支持如下编码方式:Unicode、UTF8、GBK/18030、BIG5

特殊说明:

支持中文字符等价于英文字符:1. 左括号(2. 右括号)3. 逗号,4. 冒号:5. 分号;6. 问号?7. 感叹号!
/!hotdb:/暂不支持中文符号。
以下举例说明(左右中文括号查询):

root@127.0.0.1:(none) 01:01:01> SELECT hello('world';
+--------------------+
| hello('world'|
+--------------------+
| Hello,world!     |

configMGR & bak1Url & bak1Username & bak1Password

参数说明:

PropertyValue
参数值configMGR
是否可见
参数说明配置库是否使用MGR
默认值false
Reload是否生效
PropertyValue
参数值bak1Url
是否可见
参数说明MGR配置库地址
默认值
Reload是否生效
PropertyValue
参数值bak1Username
是否可见
参数说明MGR配置库用户名
默认值
Reload是否生效
PropertyValue
参数值bak1Password
是否可见
参数说明MGR配置库密码
默认值
Reload是否生效

参数作用:
configMGR和bak1Url和bak1Username以及bak1Password属于配套参数,用于MGR配置库功能。若使用MGR配置库,则需要设置为对应MGR配置库的信息且保证MGR配置库实例的复制关系正常,且互为MGR,当主配置库发生故障时会自动切换到新的主配置库。MGR配置库最多支持3个。

<property name="configMGR">true</property> <!-- 配置库是否使用MGR -->
<property name="bak1Url">jdbc:mysql://192.168.210.32:3306/hotdb_config</property> <!-- MGR配置库地址(如配置库使用MGR,必须配置此项),需指定配置库服务所在的真实IP地址 -->
<property name="bak1Username">hotdb_config</property> <!-- MGR配置库用户名(如配置库使用MGR,必须配置此项) -->
<property name="bak1Password">DRDS_config@2013</property> <!-- MGR配置库密码(如配置库使用MGR,必须配置此项) -->

crossDbXa

参数说明:

PropertyValue
参数值crossDbXa
是否可见
参数说明跨逻辑库是否采用XA事务
默认值false
Reload是否生效

参数设置:
server.xml中crossDbXa参数如下配置:

<property name="crossDbXa">false</property>

参数作用:
开启enableXA时,如果存在跨逻辑库查询的XA事务,需要开启crossDbXa才能保证强一致性。当crossDbXa未开启时也可以支持,但不保证数据的强一致,且事务内加入新节点,查询会报错。以下四个场景举例说明:

数据准备:

  1. 开启XA
  2. 逻辑库A,默认节点为1,2;逻辑库B,默认节点为2,3,4
  3. 逻辑库A创建表a;逻辑库B创建表b;两张表的表结构一致
  4. 表a中插入1000条数据;表b无数据

场景一、crossDbXa 关闭时,不保证数据强一致:

1.开启一个session,执行如下SQL:

use A;
begin;
insert into B.b select * from A.a;
commit;
use B;
begin;
delete from b;
commit;

两个事务反复交替执行,无间隔时间;

2.开启另外一个session,反复执行:

use A;
select count(*) from B.b;

结果:count (*)得出的结果不一定全为0或1000
在这里插入图片描述
场景二、crossDbXa 开启时,保证数据强一致:

1.开启一个session,执行如下SQL:

use A;
begin;
insert into B.b select * from A.a;
commit;
use B;
begin;
delete from b;
commit;

两个事务反复交替执行,无间隔时间;

2. 开启另外一个session,反复执行:

use A;
select count(*) from B.b;

结果:Count (*)得出的结果为0或1000
在这里插入图片描述
场景三、crossDbXa 关闭时,事务内加入节点会报错:

1.开启一个session,执行如下SQL:

use A;
begin;
select * from A.a;
select * from B.b;

结果:select * from B.b;执行会报错
在这里插入图片描述

场景四、crossDbXa 开启时,事务内加入节点正常执行:

1.开启一个session,执行如下SQL:

use A;
begin;
select * from A.a;
select * from B.b;

结果:select * from B.b;正常执行
在这里插入图片描述

cryptMandatory

参数说明:

PropertyValue
参数值cryptMandatory
是否可见
参数说明是否强制加密密码
默认值False
Reload是否生效

参数设置:

<property name="cryptMandatory">false</property><!-- 是否强制加密密码,是:true,否:false -->

参数作用:
于设置计算节点是否可以读取加密后的存储节点密码。

  • True状态:
    • 存储节点密码为明文的时候,计算节点会无法连接该存储节点
    • 存储节点密码为密文的时候,计算节点能够连接该存储节点
  • False状态:
    • 存储节点密码为明文的时候,计算节点能够连接该存储节点
    • 存储节点密码为密文的时候,计算节点能够连接该存储节点

clientDeprecateEof

参数说明:

PropertyValue
参数值clientDeprecateEof
是否可见
参数说明客户端激活CLIENT_DEPRECATE_EOF标志后,发送OK包
默认值0
Reload是否生效

参数设置:
server.xml的clientDeprecateEof参数设置为0:

<property name="clientDeprecateEof">0</property><!-- 当客户端激活CLIENT_DEPRECATE_EOF标志后,在结果集包后发送OK包而非EOF包, 0:关闭, 1:开启-->

参数作用:
由于pyodbc无法智能处理CLIENT_DEPRECATE_EOF标志位,增加参数clientDeprecateEof,当客户端激活CLIENT_DEPRECATE_EOF标志后,在结果集包后发送OK包而非EOF包, 0:关闭, 1:开启

cteMaxRecursiveDepth

参数说明:

PropertyValue
参数值cteMaxRecursiveDepth
是否可见
参数说明公共表达式(CTE)最大递归深度
默认值1000
最小值0
最大值4294967295
Reload是否生效

参数设置:

<property name="cteMaxRecursiveDepth">1000</property><!--   公共表达式(CTE)最大递归深度(The common table expression (CTE) maximum recursion depth)   -->

参数作用:
用于设置计算节点公共表达式(CTE)最大递归深度。公共表达式语法同存储节点 8.0语法一致(仅支持SELECT),在计算节点做支持,故不限制存储节点版本。

例如: 设置cteMaxRecursiveDepth的值为5,未超出公共表达式最大递归深度场景:

root@127.0.0.1:cte1 5.7.25 11:37:38> WITH RECURSIVE cte (n) AS (   SELECT 1   UNION ALL   SELECT n + 1 FROM cte LIMIT 3 ) SELECT * FROM cte;
+------+
| n    |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.01 sec)

超出公共表达式最大递归深度场景:

root@127.0.0.1:cte1 5.7.25 11:40:15> WITH RECURSIVE cte (n) AS (   SELECT 1   UNION ALL   SELECT n + 1 FROM cte LIMIT 7 ) SELECT * FROM cte;
ERROR 3636 (HY000): Recursive query aborted after 6 iterations. Try increasing cteMaxRecursiveDepth to a larger value in server.xml

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java基础概念38:正则表达式3-捕获分组

一、定义 分组就是一个小括号。 分组的特点&#xff1a; 二、捕获分组 捕获分组就是把这一组的数据捕获出来&#xff0c;再用一次。 后续还要继续使用本组的数据。 正则内部使用&#xff1a;\\组号正则外部使用&#xff1a;$组号 2-1、正则内部使用&#xff1a;\\组号 示…

使用Mac下载MySQL修改密码

Mac下载MySQL MySQL官网链接MySQL​​​​​​ 当进入到官网后下滑到community社区&#xff0c;进行下载 然后选择community sever下载 这里就是要下载的界面&#xff0c;如果需要下载之前版本的话可以点击archives&#xff0c; 可能会因为这是外网原因&#xff0c;有时候下…

【初阶数据结构篇】队列的实现(赋源码)

文章目录 须知 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&#xff1…

【云计算】腾讯云架构高级工程师认证TCP--考纲例题,知识点总结

【云计算】腾讯云架构高级工程师认证TCCP–知识点总结&#xff0c;排版整理 文章目录 1、云计算架构概论1.1 五大版块知识点&#xff08;架构设计&#xff0c;基础服务&#xff0c;高阶技术&#xff0c;安全&#xff0c;上云&#xff09;1.2 课程详细目录1.3 云基础架构设计1.4…

AR智能眼镜|AR眼镜定制开发|工业AR眼镜方案

AR眼镜的设计与制造成本主要受到芯片、显示屏和光学方案的影响&#xff0c;因此选择合适的芯片至关重要。一款优秀的芯片平台能够有效提升设备性能&#xff0c;并解决多种技术挑战。例如&#xff0c;采用联发科八核2.0GHz处理器&#xff0c;结合12nm制程工艺&#xff0c;这种低…

大数据新视界 -- 大数据大厂之 Impala 性能优化:集群资源动态分配的智慧(上)(23 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

代理池搭建优化-(书接上回,优化改进)

炮台有效炮弹实现 声明 学习视频来自 B 站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 ✍&#x1f3fb;作者…

光伏业务管理系统能解决光伏企业什么问题?

随着技术进步和市场规模的扩大&#xff0c;光伏企业面临着日益复杂的管理挑战&#xff0c;包括但不限于项目监管、运维管理、供应链优化、客户管理以及数据分析决策等方面。为了解决这些挑战&#xff0c;光伏业务管理系统应运而生&#xff0c;成为提升光伏企业运营效率、降低成…

【UE5】在材质中计算模型在屏幕上的比例

ViewProperty节点有很多有意思的变量 例如用 ViewProperty 的 tan ⁡ ( FOV / 2 ) \tan(\text{FOV} / 2) tan(FOV/2) 输出&#xff0c;用它计算模型占屏幕的比例。 &#xff08;常用于for运算的次数优化&#xff0c;也可以用于各种美术效果&#xff09; ScaleOnScreen Obje…

2024年人工智能技术赋能网络安全应用测试:广东盈世在钓鱼邮件识别场景荣获第三名!

近期&#xff0c;2024年国家网络安全宣传周“网络安全技术高峰论坛主论坛暨粤港澳大湾区网络安全大会”在广州成功举办。会上&#xff0c;国家计算机网络应急技术处理协调中心公布了“2024年人工智能技术赋能网络安全应用测试结果”。结果显示&#xff0c;广东盈世计算机科技有…

spring @Async

讨论一下 spring boot 下 使用 spring 异步执行的注解 先看下这个类&#xff1a; 这个类是 spring boot auto configure 下完成 TaskExecutor的自动配置。 1. 需要在类路径存在 ThreadPoolTaskExecutor&#xff0c;这个类是 是spring context模块下的类&#xff0c;也就是 需…

搜维尔科技:多画面显示3D系统解决方案,数据孪生可视化大屏3D展示技术

集成多画面系统 集成多画面系统解决方案 1.适合多个用户的紧凑型入门级解决方案 2.会议室功能、审批功能、3D模型讨论等多种使用可能性 3.配有组合设备&#xff0c;方便整合 CAVE 多画面显示系统 1.专业的大屏幕多画面解决方案 2.墙壁、天花板和地板三面CAVE 3.专为沉浸…

linux从0到1——shell编程7

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

数据科学与SQL:组距分组分析 | 区间分布问题

目录 0 问题描述 1 数据准备 2 问题分析 3 小结 0 问题描述 绝对值分布分析也可以理解为组距分组分析。对于某个指标而言&#xff0c;一个记录对应的指标值的绝对值&#xff0c;肯定落在所有指标值的绝对值的最小值和最大值构成的区间内&#xff0c;根据一定的算法&#x…

大数据调度组件之Apache DolphinScheduler

Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用。 主要特性 易于部署&#xff0c;提供四种部署方式&#xff0c;包括Standalone、Cluster、Docker和…

使用 前端技术 创建 QR 码生成器 API1

前言 QR码&#xff08;Quick Response Code&#xff09;是一种二维码&#xff0c;于1994年开发。它能快速存储和识别数据&#xff0c;包含黑白方块图案&#xff0c;常用于扫描获取信息。QR码具有高容错性和快速读取的优点&#xff0c;广泛应用于广告、支付、物流等领域。通过扫…

Hash table类算法【leetcode】

哈希表中关键码就是数组的索引下标&#xff0c;然后通过下标直接访问数组中的元素 那么哈希表能解决什么问题呢&#xff0c;一般哈希表都是用来快速判断一个元素是否出现集合里。 例如要查询一个名字是否在这所学校里。 要枚举的话时间复杂度是O(n)&#xff0c;但如果使用哈希…

UI自动化测试中公认最佳的设计模式-POM

一、概念 什么是POM&#xff1f; POM是PageObjectModule&#xff08;页面对象模式&#xff09;的缩写&#xff0c;其目的是为了Web UI测试创建对象库。在这种模式下&#xff0c;应用涉及的每一个页面应该定义为一个单独的类。类中应该包含此页面上的页面元素对象和处理这些元…

Elasticsearch客户端在和集群连接时,如何选择特定的节点执行请求的?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch客户端在和集群连接时&#xff0c;如何选择特定的节点执行请求的&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch客户端在和集群连接时&#xff0c;如何选择特定的节点执行请求的&#xff1f; 100…

Python数据结构day2

一、链表 1.1目的 解决顺序表存储数据有上限&#xff0c;并且插入和删除操作效率低的问题 1.2概念 链表&#xff1a;链式存储的线性表&#xff0c;使用随机物理内存存储逻辑上连续的数据 链表的组成&#xff1a;由一个个结点组成 结点&#xff1a;由数据域和链接域组成&a…