hhdb数据库介绍(9-21)

计算节点参数说明

checkClusterBeforeDnSwitch

参数说明:

Property Value
参数值 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

参数说明:

Property Value
参数值 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

参数说明:

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

参数设置:

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

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

参数作用:

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

checkConnValidTimeout

参数说明:

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

参数设置:

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

参数作用:

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

checkMySQLParamInterval

参数说明:

Property Value
参数值 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

参数说明:

Property Value
参数值 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

参数说明:

Property Value
参数值 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

参数说明:

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

参数设置:

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

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

clusterHeartbeatTimeoutMs

参数说明:

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

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

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

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

clusterHost

参数说明:

Property Value
参数值 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

参数说明:

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

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

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

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

clusterNetwork

参数说明:

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

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

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

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

clusterPacketTimeoutMs

参数说明:

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

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

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

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

clusterPort

参数说明:

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

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

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

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

clusterRole

参数说明:

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

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

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

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

clusterSize

参数说明:

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

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

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

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

clusterStartedPacketTimeoutMs

参数说明:

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

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

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

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

columnPrivilegeDenied

参数说明:

Property Value
参数值 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

参数说明:

Property Value
参数值 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

参数说明:

Property Value
参数值 configMGR
是否可见
参数说明 配置库是否使用MGR
默认值 false
Reload是否生效
Property Value
参数值 bak1Url
是否可见
参数说明 MGR配置库地址
默认值
Reload是否生效
Property Value
参数值 bak1Username
是否可见
参数说明 MGR配置库用户名
默认值
Reload是否生效
Property Value
参数值 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

参数说明:

Property Value
参数值 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

参数说明:

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

参数设置:

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

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

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

clientDeprecateEof

参数说明:

Property Value
参数值 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

参数说明:

Property Value
参数值 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
posted @   恒辉信达  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示