1.3 server.xml 配置

整体XML结构

  • system (目前reload不会做变更)
    • properties
  • user (可多值,reload可变更)
  • firewall (reload可变更)
    • whitehost
    • blacklist
    • host

配置选项

注意:"实例/全局属性" 指的是如果集群配置多个中间件,是否要求配置在全局级别保持一致,或者实例间可以不同

version

在2.18.12.0之后的版本中server.xml在文件头中添加了version属性,以供运维人员区分配置创建或修改的版本(xml配置version对照表)
verison字段不匹配时,启动和dryrun会给出NOTICE的提示,但不会影响功能

property

模块

配置名称



配置内容



默认值/单位



详细作用原理或应用



配置范围



范围


版本变更
后端连接socket 配置

backSocketSoRcvbuf  



后端套接字接收缓冲区大小



1024×1024×4
,单位字节



在创建后端管道的时候作为buffer大小使用



正整数

实例



-



backSocketSoSndbuf  



后端套接字发送缓冲区大小



1024×1024
,单位字节



在创建后端管道的时候作为buffer大小使用



正整数

实例



-



backSocketNoDelay



后端Nagle算法是否禁用



默认1/单位无



在创建后端管道的时候禁用延迟加载,会影响网络包的情况 详见相关资料



1-是,
0-否


实例



-


前端连接socket 配置

frontSocketSoRcvbuf  



前端套接字接受缓冲区大小



10241X1024
,单位字节



在读取网络传输信息的时候作为每次缓冲的大小使用



正整数

实例



-



frontSocketSoSndbuf  



前端套接字发送缓冲区大小



1024×1024×4
,单位字节



在创建前端管道的时候作为buffer大小使用



正整数

实例



-



frontSocketNoDelay  



前端Nagle算法是否禁用



默认1



在创建前端管道的时候禁用延迟加载 相关资料



1-是,0-否

实例



-


Session预留内存配置

orderMemSize



session中的复杂查询order预留内存



默认4,单位M



在session初始化的时候创建内存分配对象,在复杂查询order by的时候使用到



正整数

实例



2.18.02.0引入



otherMemSize



session中的复杂查询其他预留内存



默认4,单位M



在session初始化的时候创建内存分配对象,在复杂查询subQuery以及distinctd的时候使用



正整数

实例



2.18.02.0引入



joinMemSize



session中的复杂查询join预留内存



默认4,单位M



在session初始化的时候创建内存分配对象,在复杂查询join使用到



正整数

实例



2.18.02.0引入


堆外内存管理

bufferPoolChunkSize


内存池中分配的最小粒度

默认4096
,单位字节



内存池中分配的最小粒度,需要的大小除以此粒度,向上取整





实例



-



bufferPoolPageNumber



预分配内存池页数量



默认20×
java虚拟机核数



在初始化的时候通过和bufferPoolPageSize的相乘确定缓冲池最后的大小,内存配置建议见1.4_wrapper.conf





实例



-



bufferPoolPageSize



预分配内存池页大小



默认512×1024×4
,单位字节



在初始化的时候通过和bufferPoolPageNumbe的相乘确定缓冲池最后的大小,


注意:虚拟机参数MaxDirectMemorySize(见1.4_wrapper.conf)需要大于bufferPoolPageNumber * bufferPoolPageSize,否则会触发OOM





实例



-



mappedFileSize



文件映射区单个文件最大体积



默认1024×1024×64
,单位字节



在初始化的时候此参数确定文件映射区最大容量,参见内存管理章节






实例



2.17.04.0引入



useOffHeapForMerge


暂时废弃,待重审



处理跨分配结果合并是不是采用Direct Memory



默认1



在初始化服务的时候会根据此配置初始化一个内存管理对象,并检查剩余内存的大小


并在执行中影响内存请求时请求到的内存的管理方式,在合并多节点返回数据使用





实例



2.17.11.0废弃


memoryPageSize


暂时废弃,待重审



每页内存的大小



默认1m
(写法带单位)



影响在程序中申请内存的最小单位,在多节点结果合并使用





实例



2.17.11.0废弃


spillsFileBufferSize


暂时废弃,待重审



写磁盘缓存大小



默认 2K
(写法带单位)



在合并结果集内存不够用的时候通过写磁盘来进行缓冲,


这个时候spillsFileBufferSize就是写磁盘流buffer的大小





实例



2.17.11.0废弃


dataNodeSortedTempDir


暂时废弃,待重审


写磁盘目录 默认相对路径/sortDirs 在合并结果集内存不够用的时候写磁盘



实例



2.17.11.0废弃


统计管理



bufferUsagePercent



是否清理大结果集阈值



默认80, 单位百分号



定时任务resultSetMapClear使用,周期clearBigSqLResultSetMapMs,定时清理统计的结果集,当定时任务执行时发现结果集统计超过阀值,触发清理结果集的行为



0-100



实例



-



useSqlStat



是否启用SQL统计



默认1/单位无


 



启用之后会对于下发的查询进行SQL的统计,分别按照用户、表格、查询条件进行存放在内存中

并且开启之后会随之开启recycleSqlStat定时任务以固定5秒一次的周期回收SQL统计的结果



1-是0-否



实例



-



clearBigSqLResultSetMapMs



定期大结果清理时间



默认600×1000
,单位毫秒



定时任务resultSetMapClear的执行周期,定时清理记录的查询结果集




正整数



实例



-


sqlRecordCount 慢查询记录阈值 默认10
,单位条
在定时任务recycleSqlStat中会进行sql记录的清理,当发现记录的慢查询SQL数量超过阀值时,会仅保留阀值数量个元素

正整数



实例



-


maxResultSet 大结果集阈值 默认512×1024
,单位字节
当查询的结果集超过这个阀值时,查询的SQL和查询结果集的大小才会被记录到结果集统计里面

正整数



实例



-



useCostTimeStat



是否启用查询耗时统计



默认0/单位无



开启之后以一定的比例统计查询过程中的各个步骤的耗时情况,可以使用BTraceCostTime.jav进行观测,也可在管理端使用show @@cost_time观察


1-是0-否



实例



2.18.02.0引入



maxCostStatSize





默认100



show @@cost_time结果最近保留的行数




实例



2.18.02.0引入



costSamplePercent



查询采样百分比



默认1/单位%




在耗时采样统计中实际采样百分比为costSamplePercent




实例



2.18.02.0引入



useThreadUsageStat



开启线程使用率统计



默认0/单位无




开启之后能在管理端通过管理命令show @@thread_used查看各个部分的线程使用情况


1-是0-否



实例



2.18.02.0引入


系统服务基本参数

bindIp



服务IP



默认 "0.0.0.0"



在服务初始化的时候作为侦听的IP



有效IP地址,
推荐默认



实例



-



serverPort



服务端口



默认8066



在服务初始化的时候作为服务侦听的端口



机器空闲端口



实例



-



managerPort



控制端口



默认9066



在服务初始化的时候作为控制侦听的



机器空闲端口



实例



-



maxCon



控制最大连接数



默认0



默认不做限制。若maxCon大于0,建立的连接数大于maxCon之后,建立连接会失败.注意当各个用户的maxcon总和值大于此值时,以当前值为准。 全局maxCon不作用于manager用户



正整数



实例



2.18.09.0引入



processors



NIO前端处理器的数量



默认java虚拟机核数
,单位个



进行前端网络IO吞吐的线程数



正整数



实例



-



backendProcessors



NIO后端处理器的数量



默认java虚拟机核数
,单位个



进行后端网络IO吞吐的线程数



正整数



实例



2.18.02.0引入



fakeMySQLVersion



dble模拟mysql版本号



默认NULL



模拟成正常的MySql版本在进行前端协议交互的时候能够使用到



MYSQL版本号



最好全局,实例也可



-



processorExecutor



前端业务处理线程池数量



默认
(单核为2,否则等于宿主机核数)



进行前端具体业务处理的线程池大小,负责解析路由下发



正整数



实例



-



backendProcessorExecutor



后端业务处理线程池数量



默认
(单核为2,否则等于宿主机核数)



进行后端具体业务处理的线程池大小,负责回收结果集并合并



正整数



实例



2.18.02.0引入



complexExecutor



复杂查询后端业务线程池数量



默认
(单核为2,否则等于宿主机核数,宿主机核数大于8时,数量为8



负责复杂查询或者子命令结果集的回收



正整数



实例



2.18.02.0引入



sequnceHandlerType



全局序列处理器的方式



默认2
,单位无



在初始化的时候根据这个配置选择不同的序列生成器进行加载


0,通过静态配置文件sequence_conf.properties来设置全局sequence的取值范围


1,MySQL offset-step序列方式, sequence信息存储在数据库中 


2,时间戳方式(类Snowflake), 依赖sequence_time_conf.properties


3,分布式time序列(类Snowflake)


4,分布式offset-step序列



1,2,3,4



全局



-



serverNodeId



服务编号



默认1



在分布式事务的时候构造 XATXID,同组中必须不同


其形式为$ServerName$.serverNodeId.xid



正整数



实例



-


serverBacklog 前端tcp连接 backlog 默认2048 前端tcp连接 backlog

正整数



实例



2.17.04.0引入


showBinlogStatusTimeout 拉取一致性binlog线的超时时间 默认60000
,单位毫秒
拉取一致性binlog线的超时时间

正整数



全局



2.17.08.0引入



usePerformanceMode



是否启用性能模式



默认0/单位无



开启之后Dble会大量占用CPU资源,并提供更高的性能体现,慎用


1-是0-否



实例



2.18.02.0引入


lowerCaseTableNames 大小写敏感 true 不敏感
,其他值敏感
在代码里面所有涉及表明判断的时候使用到,如果开启true
大小写不敏感在代码判定的时候都会转化成小写进行判定

正整数



全局



2.17.04.0引入
2.17.11.0废弃
中间件自行获取


useHandshakeV10 使用V10 1代表使用
,否则不使用
握手协议时使用

正整数



全局



2.17.09.0废弃


功能性配置

useCompression



是否启用数据压缩



默认 0否



使用mysql压缩协议



1 - 是 0 - 否



全局



-



usingAIO



是否启用AIO



默认0



在初始化服务的时候将会作为判断启用AIO或是NIO的依据



1 - 是 0 - 否



实例



-



useZKSwitch



是否启用useZKSwitch转换



默认 true



是否使用ZK记录节点切换的结果,当且仅当myid.properties中的ZK配置有效时才启用,会将本地文件状态下的dnindex.properties信息保存到ZK的对应路径中使用



true 是 false否



全局



-



连接缺省值

 


 



charset



字符集



utf8mb4



应用于所有字符集相关的部分,包括前端连接和后端连接



有效字符集



全局



-



maxPacketSize



包大小限制



默认 4×1024×1024



前后端管道建立的时候用作参数使用



正整数



全局



-



txIsolation



隔离级别



默认 3



执行具体SQL的时候会比较前后端连接,


如果不一致将会执行session级别的事务set



1-READ_UNCOMMITTED
2-READ_COMMITTED
3-REPEATABLE_READ
4-SERIALIZABLE


全局



-


一致性检查

checkTableConsistency



表格一致性检查



默认0



如果值为1,那么在服务初始化的时候会启动一个定时任务,在


定时任务会检查DB是不是存在,表格是不是存在,表结构是否一致



1-是,0-否



实例



-



checkTableConsistencyPeriod



表格一致性检查周期



默认30×60×1000
,单位毫秒



表格一致性检查周期



正整数



实例



-



useGlobleTableCheck



全局表一致性检测是否开启



默认1开启



在服务初始化时候会根据这个开启全局表一致性检查globalTableConsistencyCheck,周期为


glableTableCheckPeriod


会去查看记录数量以及内部列是否一致



1 -开启 0- 不开启



全局



-



glableTableCheckPeriod



全局表一致性检查周期



默认24 * 60 * 60 * 1000
,单位毫秒



上一个定时任务的周期



正整数



实例



-


心跳任务周期

dataNodeIdleCheckPeriod



后端空闲连接心跳周期



默认5×60×1000
,单位毫秒



后端空闲连接心跳检查,超时关闭,调整容量



正整数



实例



-



dataNodeHeartbeatPeriod



数据节点心跳任务周期



10X1000
,单位毫秒



根据这个周期在服务初始化的时候注册心跳任务



正整数



实例



-


processor内部前后端连接检查
 

sqlExecuteTimeout



后端连接执行超时时间



默认 300
,单位秒



如果超过这个时间没有完毕,就直接关闭连接



正整数



实例



-



idleTimeout



(前端)连接无响应超时时间



 默认 30×60 × 1000
,单位毫秒



在processor定时连接检查时,发现前端连接上一次的读写距今超过阀值,会直接关闭连接



正整数



实例



-



processorCheckPeriod



processor定时任务检查周期



1000
,单位毫秒



根据此配置定时的检查在processor中的前后端连接的状态



正整数



实例



-


普通事务日志相关

recordTxn



事务log记录



默认0



在初始化服务的时候会注册一个类,其作用就是将事务的log写到一个指定的文件中



1-是,0-否



实例



2.17.04.0引入



transactionLogBaseDir



事务log目录



默认当前路径/txlogs



当开启日志log记录时,记录文件会被存放在对应目录下



绝对路径



实例



-



transactionLogBaseName



事务log文件名称



默认server-tx



事务记录存储文件的文件名



符合运行系统
文件的命名规范



实例



-


transactionRatateSize 事务日志单个文件大小 默认16
,单位M
 

正整数



实例



-


视图相关参数

viewPersistenceConfBaseDir



视图记录本地文件路径



dble目录/viewConf



用于存放视图本地记录文件的文件路径



绝对路径



集群配置时无意义



2.17.11.0引入



viewPersistenceConfBaseName



视图记录本地文件名



viewJson



视图记录的文件文件名



符合运行系统
文件的命名规范



集群配置时无意义



2.17.11.0引入


XA 事务

xaRecoveryLogBaseDir



xa的tm日志路径



dble目录/tmlogs/ 


此日志涉及到XA事务状态的记录,并且在Dble意外重启之后需要从里面获取重启之前的xa事务状态,切勿自行修改

绝对路径



实例



-


xaRecoveryLogBaseName xa的tm日志名称 tmlog  

符合运行系统
文件的命名规范



实例



-



xaSessionCheckPeriod



XA定时任务执行周期



默认1000, 单位ms



在server开始的时候会注册一个定时任务以此参数为执行周期


(注:定时任务必定会被注册)


如果有尝试多次没有成功提交的session在之后的定时任务会被重复提交



正整数



实例



2.17.04.0引入



xaLogCleanPeriod



定时XAlog清除周期



默认1000, 单位ms



在server开始的时候会根据这个周期注册一个定时任务


(注:定时任务必定会被注册)


定时清XA log,主要是将已经回滚和提交成功的部分从记录中删除



正整数



实例



2.17.04.0引入



xaRetryCount



后台重试XA次数



默认0



后台定时任务重试XA次数,0为无限重试,达到设定次数后,停止重试



正整数



实例



2.19.03.0引入


cluster相关参数 clusterHeartbeatPass          

-


clusterHeartbeatUser          

-


队列大小参数 joinQueueSize join时,左右结点的暂存数据行数的队列大小 1024 当行数大于此值而又没有及时被消费者消费掉,将会阻塞,目的是防止接收数据量太大,堆积在内存中 正整数 实例

2.17.04.0引入


mergeQueueSize merge时,左右结点的暂存数据行数的队列大小 1024 当行数大于此值而又没有及时被消费者消费掉,将会阻塞,目的是防止接收数据量太大,堆积在内存中 正整数 实例

2.17.04.0引入


orderByQueueSize 排序时,时,左右结点的暂存数据行数的队列大小 1024 当行数大于此值而又没有及时被消费者消费掉,将会阻塞,目的是防止接收数据量太大,堆积在内存中 正整数 实例

2.17.04.0引入


使用Nest Loop优化 useJoinStrategy 是否使用nest loop 优化 默认不使用 开启之后会尝试判断join两边的where来重新调整查询SQL下发的顺序 true 开启
false 不开启
实例

2.17.04.0引入


nestLoopConnSize 临时表阈值 默认4
若临时表行数大于这两个值乘积,则报告错误

正整数

实例  

2.17.04.0引入


nestLoopRowsSize 临时表阈值 默认2000
慢查询日志相关配置

enableSlowLog



慢查询日志开关



默认为0,关闭



慢查询日志开关



0或者1

实例



2.18.09.0 引入



slowLogBaseDir



慢查询日志存储文件夹



dble根目录/slowlogs



慢查询日志存储文件夹



文件夹路径

实例



2.18.09.0 引入



slowLogBaseName



慢查询日志存储文件名前缀



slow-query



慢查询日志存储文件名前缀(后缀名是.log)



合法文件名

实例



2.18.09.0 引入



flushSlowLogPeriod



日志刷盘周期,单位秒



1



日志刷盘周期,每隔这个周期,会强制将内存数据刷入磁盘



正整数

实例



2.18.09.0 引入



flushSlowLogSize



日志刷盘条数阈值



1000



日志刷盘条数阈值,内存中每次写出这么多条日志,会强制刷盘1次



正整数

实例



2.18.09.0 引入



sqlSlowTime



慢日志时间阈值,单位毫秒



100



慢日志时间阈值,大于此时间的查询会记录下来



正整数

实例



2.18.09.0 引入


load data 相关配置

maxCharsPerColumn



每列所允许最大字符数



默认为65535



每行所允许最大字符数



正整数

实例



2.19.03.0 引入



maxRowSizeToFile



需要持久化的最大行数



默认为10000



当load data的数据行数超过阈值后,会将数据保存在文件中以防OOM



正整数

实例



2.19.03.0 引入


高可用联动相关配置

useOuterHa



是否启用外部高可用联动



默认为false





true/false

实例



2.19.09.0 引入


废弃配置

processorBufferPoolType



缓冲池类型



默认 0



在服务初始化的时候根据这个值确定缓冲池的类型


0,直接缓冲块


1,6个队列缓冲


(实际1未完成,删除)



2.17.04.0废弃



useStreamOutput



启用结果集流输出,不经过合并模块



默认 0



有bug,无应用场景,废弃



2.17.04.0废弃



systemReserveMemorySize


暂时废弃,待重审



系统预留内存



384M



在启用useOffHeapForMerge配置的时候如果系统剩余的内存小于这个配置


,服务将不会启动(仅在配置useOffHeapForMerge的时候有效)



2.17.04.0废弃



sqlInterceptor



SQL拦截器



默认 DefaultSqlInterceptor


拦截SQL,进行统计等处理,默认实现极影响性能,废弃


                 

2.17.04.0废弃



catletClassCheckSeconds



类加载重载检查时间



60



Catlet 类加载器(废弃)



2.17.04.0废弃



sqlInterceptorFile



SQL解析器sqllogs



默认 ./logs/sql.txt



在每个SQL解析的之前都会通过写文件进行记录(废弃)



2.17.04.0废弃



defaultSqlParser



默认SQL解析器



默认druidparser



解析器不支持其他,废弃



2.17.04.0废弃



handleDistributedTransactions



分布式事务开关



-



0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志



2.17.04.0废弃


用户配置

user(管理用户配置)

配置名称

配置内容

是否能配多个元素

可选项/默认值

详细作用原理或应用

全局/实例属性

name

用户名

符合mysql用户名规范的字符串

用户唯一标识,用于登录校验

实例

manager

是否为manager用户

true-是 false-否 默认否

是否是manager用户,若一个用户是manager用户,则只能登录管理端口,并且只能执行管理端命令,依旧受到白名单制约

实例

password

密码

 

用户密码校验

实例

benchmark

负载限制,2.18.09.0废弃,使用maxCon代替

用户的连接数限制,会在用户验证登录的时候进行校验

实例

maxCon

负载限制,默认不做限制

 

用户的连接数限制,会在用户验证登录的时候进行校验,默认0,表示不做限制。 特别的,当系统级别的maxCon已经到达上限之后,本用户的maxCon会失效,不能新建连接

实例

usingDecrypt

是否启用加密

默认 0否

启用加密password项配置通过执行脚本encrypt.sh 0:{user}:{password}的结果进行配置
举例:
encrypt.sh 0:xxx:123456
fP/nl3XPXrSfWjpQzit5lIOrRU1QRXuLTYtATUG0fGW2k5kdXUhKL5zf02hE6nGjdnSWrufVkJPUZpbQ2qX9uQ==
配置项:
password fP/nl3XPXrSfWjpQzit5lIOrRU1QRXuLTYtATUG0fGW2k5kdXUhKL5zf02hE6nGjdnSWrufVkJPUZpbQ2qX9uQ==
user xxx
登录项:
-u root -p123456

实例

user(业务用户配置)

配置名称

配置内容

是否能配多个元素

可选项/默认值

详细作用原理或应用

全局/实例属性

name

用户名

符合mysql用户名规范的字符串

用户唯一标识,用于登录校验

实例

password

密码

 

用户密码校验

实例

benchmark

负载限制,2.18.09.0废弃,使用maxCon代替

用户的连接数限制,会在用户验证登录的时候进行校验

实例

maxCon

负载限制,默认不做限制

 

用户的连接数限制,会在用户验证登录的时候进行校验,默认0,表示不做限制。 特别的,当系统级别的maxCon已经到达上限之后,本用户的maxCon会失效,不能新建连接

实例

readOnly

用户只读标志

 

在执行SQL的时候进行判断,如果是readonly不执行查询以外的SQL

实例

schemas

用户对应使用的schema.xml中的方案

 

用户有权限的schemas 列表,通过,进行分割(db1,db2,db3)

实例

usingDecrypt

是否启用加密

默认 0否

启用加密password项配置通过执行脚本encrypt.sh 0:{user}:{password}的结果进行配置
举例:
encrypt.sh 0:xxx:123456
fP/nl3XPXrSfWjpQzit5lIOrRU1QRXuLTYtATUG0fGW2k5kdXUhKL5zf02hE6nGjdnSWrufVkJPUZpbQ2qX9uQ==
配置项:
password fP/nl3XPXrSfWjpQzit5lIOrRU1QRXuLTYtATUG0fGW2k5kdXUhKL5zf02hE6nGjdnSWrufVkJPUZpbQ2qX9uQ==
user xxx
登录项:
-u root -p123456

实例

privileges

权限

 

详情见user.privileges

实例

user.privileges(用户权限)


配置名称



配置内容


多节点

可选项/默认值



详细作用原理或应用



全局/实例



check



是否需要检查



默认否 true-是 false-否



如果在进行DML解析并进行用户权限检查的时候,配置为是会严格检查权限情况,配置为否则不会检查


实例

schema



用户的schema节点权限情况





配置为空的情况下默认拥有所有有效schema的权限


实例

user.privileges.schema


配置名称



配置内容


多节点

可选项/默认值



详细作用原理或应用



全局/实例



name



schema名称



 



用以标识对应schema


实例

dml



dml权限



0000



权限判断,每一位分别表示INSERT UPDATE SELECT DELETE四种权限


1- 拥有权限 0-没有权限 例如拥有所有权限为1111

实例

table



 



 



如果没有配置,则table继承schema的权限


实例

user.privileges.schema.table


配置名称



配置内容


多节点

可选项/默认值



详细作用原理或应用



全局/实例



name



表格名称



 



在权限判断的时候作为key值


实例

dml



dml权限



0000



权限判断,每一位分别表示INSERT UPDATE SELECT DELETE四种权限


1- 拥有权限 0-没有权限 例如拥有所有权限为1111

实例

firewall配置

配置名称 是否可以配置多个 配置内容 默认值 配置范围/可选项 详细作用原理或应用 范围
whitehost 白名单
白名单的总结点 实例
blacklist 黑名单
黑名单的总结点 实例

firewall.whitehost(host白名单配置)

配置名称 节点是否可配多个 属性元素 元素是否可配多个 配置内容 默认值 配置范围/可选项 详细作用原理或应用 实例/全局属性
Host host 白名单某个具体的IP host

有效IP地址

如需配置localhost可使用IP

host = "0:0:0:0:0:0:0:1"

ip值是多个平行配置的唯一标识,ip重复配置会导致部分配置丢失。如单个IP想配置多个用户请在user属性里用逗号隔开。

白名单功能类似mysql的权限控制,指定某些IP只能有某些特定的用户登录进行登录。

如启用白名单,除白名单标注的IP用户之外,其他dble用户均无法登录

实例
user 对应IP host可以允许连接的用户

 有效dble用户名,使用','进行分割

例如user="user1,user2,user3"

firewall.blacklist(黑名单配置)

配置类型 配置名称 属性元素 是否可以配置多个 配置内容 默认值 配置范围/可选项 详细作用原理或应用 实例/全局属性
blacklist元素属性 blacklist check 是否进行黑名单校验 false true/false

如果开启黑名单校验,黑名单中规定的行为SQL都被禁止

影响范围全局,所有用户都无法豁免

实例
  blacklist下挂property property name 详细的黑名单校验规则
如果开启黑名单校验具体的校验规则将有 所有property来确定 实例

firewall.blacklist.property(黑名单配置)

配置名称
配置内容
默认值
可选项
详细作用原理或应用
备注
selectHavingAlwayTrueCheck

是否允许复杂select having

条件结果恒为真

true true - 允许
false -禁止       

1、having部分的结果为真

2、SQL语句需要以注释结尾(不能有换行之类的)

3、条件部分不是简单SQL(单个条件、含有简单数值对等或大小比较、直接是真假值的表达式等)

符合以上三个条件的查询在校验的时候会被阻止,

举例:select * from test having id = id and hujh = hujh   /*lxxddfsgdfsfdqwesfct*/;

暂不具有实际意义
selectWhereAlwayTrueCheck

是否允许复杂select where

条件结果恒为真

true

true - 允许

false -禁止

1、where部分的结果为真

2、SQL语句需要以注释结尾(不能有换行之类的)

3、条件部分不是简单SQL(单个条件、含有简单数值对等或大小比较、直接是真假值的表达式等)

符合以上三个条件的查询在校验的时候会被阻止,

举例:select * from test where id = id and hujh = hujh   /*lxxddfsgdfsfdqwesfct*/;

暂不具有实际意义
doPrivilegedAllow
druid内部权限控制使用
false

true - 允许

false -禁止

druid内部函数调用flag,在dble中没有作用 暂不具有实际意义
wrapAllow

是否允许调用

isWrapFor和unwrap方法

true

true - 允许

false -禁止

druid内部函数调用flag,在dble中没有作用 暂不具有实际意义
metadataAllow
是否允许调用getmetadata方法 true

true - 允许

false -禁止

druid内部函数调用flag,在dble中没有作用 暂不具有实际意义
completeInsertValuesCheck
在dble依赖的1.0.31版本中没有效果 false

true - 允许

false -禁止

druid内部函数调用flag,在dble中没有作用 暂不具有实际意义
mergeAllow

是否允许merge语句

(在mysql中不支持)

true

true - 允许

false -禁止

会校验是否是merge语句 在Dble中没有效果
conditionLikeTrueAllow
是否允许like之后包含永真条件
true

true - 允许

false -禁止

会根据SQL里面的内容进行判断,如果发现有like '%'就会抛出异常 可用
conditionDoubleConstAllow
是否允许连续两个常量判断 false

true - 允许

false -禁止

会根据SQL里面的内容进行判断,如果发现有两个常量判断抛出异常

select * from suntest asdf where 1 = 1 and 2 = 1;

可用
conditionAndAlwayFalseAllow

是否允许and连接的语句存在

恒为false的条件

false

true - 允许

false -禁止

会根据where之后and跟随的条件进行判断,如果发现恒为假的情况会抛出异常

举例:select * from suntest where id = 567 and 1 != 1;

可用
conditionAndAlwayTrueAllow

是否允许and连接的语句存在

恒为true的条件

false

true - 允许

false -禁止

会根据where之后and跟随的条件进行判断,如果发现恒为真的情况会抛出异常

举例:select * from suntest where id = 567 and 1 = 1;

可用
selectAllColumnAllow
是否允许查询所有列 true

true - 允许

false -禁止

会根据查询sql进行判断,如果发现直接查询*会有这个异常,

但是如果带有别名(x.*)则不在此列

存在问题
multiStatementAllow
是否允许一次提交多条sql false

true - 允许

false -禁止

会检查sql的数量,如果超过一则抛出异常 Dble不支持
constArithmeticAllow
是否允许常量运算 true

true - 允许

false -禁止

在SQL中如果发现包含有常量运算会抛出异常

select * from suntest asdf where id = 2 -1;

可用
alterTableAllow
是否允许alter table 语句 true

true - 允许

false -禁止

在执行alter table之前会纯粹根据SQL进行语句的校验

,发现SQL是alter table语句会抛出异常返回错误信息

可用
commitAllow
是否允许commit语句 true

true - 允许

false -禁止

在执行commit之前会纯粹根据SQL进行语句的校验,

发现commit语句会抛出异常返回错误信息

可用
createTableAllow
是否允许create table 语句 ture

true - 允许

false -禁止

在执行create table之前会纯粹根据SQL进行语句的校验,

发现SQL是create table语句会抛出异常返回错误信息

可用
deleteAllow
是否允许delete语句 true

true - 允许

false -禁止

在执行delete之前会纯粹根据SQL进行语句的校验,发现delete语句会抛出异常

返回错误信息

可用
dropTableAllow
是否允许drop table 语句 ture

true - 允许

false -禁止

在执行drop table之前会纯粹根据SQL进行语句的校验

,发现SQL是drop table语句会抛出异常返回错误信息

可用
insertAllow
是否允许insert true

true - 允许

false -禁止

在执行insert之前会纯粹根据SQL进行语句的校验,发现insert语句会抛出异常

返回错误信息

可用
intersectAllow
是否支持intersect
true

true - 允许

false -禁止

在执行intersect之前会纯粹根据SQL进行语句的校验

,发现intersect语句会抛出异常返回错误信息

可用
lockTableAllow
是否允许lock tables语句 true

true - 允许

false -禁止

在执行lock tables之前会纯粹根据SQL进行语句的校验

,发现lock语句会抛出异常返回错误信息

可用
minusAllow
是否支持minus语句 true

true - 允许

false -禁止

在执行minus之前会纯粹根据SQL进行语句的校验

,发现minus语句会抛出异常返回错误信息

可用
callAllow
 是否允许call语句  true

 true - 允许

false -禁止

在执行query之前会纯粹根据SQL进行语句的校验,

发现SQL是CALL语句会抛出异常返回错误信息

可用
selectIntoOutfileAllow
是否允许SELECT ... INTO OUTFILE
false

 true - 允许

false -禁止

在执行query之前会纯粹根据SQL进行语句的校验,发现SQL是

SELECT ... INTO OUTFILE句会抛出异常返回错误信息

Dble本身不支持
selectIntoAllow
是否允许select into 语句 true

 true - 允许

false -禁止

在执行query之前会纯粹根据SQL进行语句的校验,

发现SQL是select into语句会抛出异常返回错误信息

Dble本身不支持
selelctAllow
是否允许select语句 true

 true - 允许

false -禁止

在执行query之前会纯粹根据SQL进行语句的校验,

发现SQL是select语句会抛出异常返回错误信息

可用
renameTableAllow
是否允许rename table 语句 true

true - 允许

false -禁止

在执行rename table之前会纯粹根据SQL进行语句的校验

,发现SQL是rename table语句会抛出异常返回错误信息

可用
replaceAllow
是否允许replace语句 true

true - 允许

false -禁止

在执行replace之前会纯粹根据SQL进行语句的校验,

发现replace语句会抛出异常返回错误信息

可用
rollbackAllow
是否允许rollback true

true - 允许

false -禁止

在执行rollback之前会纯粹根据SQL进行语句的校验,

发现rollback语句会抛出异常返回错误信息

可用

Dble慎用

setAllow
是否允许set语句 true

true - 允许

false -禁止

在执行set之前会纯粹根据SQL进行语句的校验,

发现set语句会抛出异常返回错误信息

可用
describeAllow
是否支持describe语句 true

true - 允许

false -禁止

在执行SQL之前会纯粹根据SQL进行语句的校验,

发现describe语句会抛出异常返回错误信息

可用
limitZeroAllow
是否允许出现limit 0的情况 false

true - 允许

false -禁止

在执行SQL之前会纯粹根据SQL进行语句的校验,

发现limit 0语句会抛出异常返回错误信息

可用
showAllow
是否允许show语句 true

true - 允许

false -禁止

在执行SQL之前会纯粹根据SQL进行语句的校验,

发现show语句会抛出异常返回错误信息

可用
hintAllow
是否允许sql 包含hint true

true - 允许

false -禁止

在执行sql之前会纯粹根据SQL进行语句的校验

,发现SQL是包含hint语句会抛出异常返回错误信息

可用
commentAllow
是否允许在SQL中存在注释 true

true - 允许

false -禁止

在执行SQL之前会纯粹根据SQL进行语句的校验,发现注释语句会抛出异常

返回错误信息

可用
mustParameterized
是否必须参数化 false

true - 是

false -否

在执行SQL之前会纯粹根据SQL进行语句的校验,

发现类似 name = 'sdfasdf' ,id = 1语句会抛出异常返回错误信息

可用
conditionOpXorAllow
是否允许SQL中使用关系符XOR false

true - 允许

false -禁止

在执行SQL之前会纯粹根据SQL进行语句的校验,

发现类似运算符语句会抛出异常返回错误信息

可用
conditionOpBitwseAllow

查询条件中是否允许有"&"、

"~"、"|"、"^"运算符。

true

true - 允许

false -禁止

在执行SQL之前会纯粹根据SQL进行语句的校验,

发现类似运算符语句会抛出异常返回错误信息

可用
startTransactionAllow
是否允许START TRANSACTION true

true - 允许

false -禁止

在执行START TRANSACTION之前会纯粹根据SQL进行语句的校验,

发现START TRANSACTION语句会抛出异常返回错误信息

注:现阶段如果开启黑名单检查begin无法通过校验,

这个是由于在druid中不支持的缘故

可用
truncateAllow
是否允许truncate语句 true

true - 允许

false -禁止

在执行truncate之前会纯粹根据SQL进行语句的校验,

发现truncate语句会抛出异常

返回错误信息

可用
updateAllow
是否允许update语句 true

true - 允许

false -禁止

在执行update之前会纯粹根据SQL进行语句的校验,发现update语句会抛出异常

返回错误信息

可用
useAllow
是否允许use语句 true

true - 允许

false -禁止

在执行use之前会纯粹根据SQL进行语句的校验,发现use语句会抛出异常

返回错误信息

可用
blockAllow
是否允许语句块
true

true - 允许

false -禁止

在解析SQL阶段会判断SQL是否属于SQL语句块,如果是的话就会抛出错误

举例:BEGIN  select * from suntest;END;//

可用
deleteWhereNoneCheck
是否允许delete语句没有where条件 false

true - 启用

false -不启用

如果发现delete语句没有限定条件会抛出异常

举例:delete from suntest;

可用
updateWhereNoneCheck
是否允许update语句没有where条件 false

true - 启用

false -不启用

如果发现update语句没有限定条件会抛出异常

举例:update suntest set name = '33';

可用
deleteWhereAlwayTrueCheck
是否允许delete语句存在恒真条件 true

true - 启用

false -不启用

如果解析发现delete语句存在恒真条件,并且满足sql以注释结尾

,并且where条件不是简单条件的,会抛出异常

举例:delete from suntest where id = id and name  = name /*sdfaasdf*/;

暂不具有实际意义
updateWhereAlayTrueCheck
是否允许delete语句存在恒真条件 true

true - 启用

false -不启用

如果解析发现delete语句存在恒真条件,并且满足sql以注释结尾

,并且where条件不是简单条件的,会抛出异常

举例:update suntest set name = '33' where id = id,name = name /*sdfsdf*/;

暂不具有实际意义
selectIntersectCheck
是否进行intersect check true

true - 进行

false -不进行

如果进行校验,则不允许except语句,

当且仅当left sql的from不是空并且right from为空的时候不能通过校验

举例:select * from sbtest1 where name = 'ff' INTERSECT  select * from dual;

暂不具有实际意义
selectExceptCheck
是否进行except  check true

true - 进行

false -不进行

如果进行校验,则不允许except语句,

当且仅当left sql的from不是空并且right from为空的时候不能通过校验

举例:select * from sbtest1 where name = 'ff' except  select * from dual;

暂不具有实际意义
selectMinusCheck
是否进行MINUS  check true

true - 进行

false -不进行

如果进行校验,则不允许MINUS语句,

当且仅当left sql的from不是空并且right from为空的时候不能通过校验

举例:select * from sbtest1 where namec = 'fff' minus select * from dual;

暂不具有实际意义
selectUnionCheck
是否进行union check true

true - 进行

false -不进行

如果进行校验,则不允许unoin语句

举例:select * from sbtest1 unoin select * from suntest;

可用
caseConditionConstAllow
是否允许复杂查询中外部是一个常量 false

true - 允许

false -禁止

是否允许复杂查询中外部是一个常量,

如果子查询外部对应的是常量那么就在SQL检查的时候抛出异常

举例:delete from suntest where id = 123 and 'name' = (select case 'fname' whe

dsome' else 'good' end from xtest ) /*sdfaasdf*/;

 

暂不具有实际意义
strictSyntaxCheck
是否启用严格语法检查 true

true - 是

false - 否

是否进行严格的语法检测,Druid SQL Parser在某些场景不

能覆盖所有的SQL语法,属于调试级别的参数,在正常的使用中不建议更改

暂不具有实际意义
schemaCheck
检测是否使用了禁用的schema true

true - 启用

false -禁止

这个需要配合drui的配置模式使用,在dble此功能无法被使用 暂不具有实际意义
tableCheck
检测是否使用了禁用的table true

true - 启用

false -禁止

这个需要配合drui的配置模式使用,在dble此功能无法被使用 暂不具有实际意义
functionCheck
检测是否使用了禁用的function true

true - 启用

false -禁止

这个需要配合drui的配置模式使用,在dble此功能无法被使用 暂不具有实际意义
objectCheck
检测是否使用了禁用的object true

true - 启用

false -禁止

这个需要配合drui的配置模式使用,在dble此功能无法被使用 暂不具有实际意义
variantCheck
检测是否使用了禁用的变量 true

true - 启用

false -禁止

这个需要配合drui的配置模式使用,在dble此功能无法被使用 暂不具有实际意义

alarm(ucore告警grpc接口)

此项不再需要单独配置,所需要的配置项从myid.properties 中读取,下面表格并非配置内容,而是内存里存储的值

名称 内容 默认值 详细作用原理或应用 实例/全局属性
url grpc告警的url myid.properties 里的ipAddress 在发送grpc的时候作为IP地址使用 实例
port 告警端口 myid.properties 里的port grpc发送的目的端口 实例
level 告警等级 warn 如果配置error只会发送error等级的告警,如果配置warn会发送warn以及error的告警信息 实例
serverId 服务器ID $ushard-id(ip1,ip2) ,其中$ushard-id 是myid.properties 里的myid 接口参数 实例
componentId 组件ID $ushard-id 即myid.properties 里myid 接口参数 实例
componentType 组件类型 ushard 接口参数 实例

配置实例

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
   - you may not use this file except in compliance with the License. - You 
   may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
   - - Unless required by applicable law or agreed to in writing, software - 
   distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
   License for the specific language governing permissions and - limitations 
   under the License. -->
<!DOCTYPE dble:server SYSTEM "server.dtd">
<dble:server xmlns:dble="http://dble.cloud/" version="9.9.9.9">
    <system>
        <!-- base config -->
        <!--<property name="bindIp">0.0.0.0</property>-->
        <!-- property name="serverPort">8066</property> -->
        <!--<property name="managerPort">9066</property> -->
        <!-- <property name="processors">1</property>-->
        <!--<property name="processorExecutor">32</property> -->
        <!--<property name="fakeMySQLVersion">5.6.20</property>-->
        <property name="sequnceHandlerType">2</property>
        <!-- serverBacklog size,default 2048-->
        <property name="serverBacklog">2048</property>
        <!--<property name="serverNodeId">1</property>-->
        <!--<property name="showBinlogStatusTimeout">60000</property>-->

        <!--option-->
        <!--<property name="useCompression">1</property>-->
        <!--<property name="usingAIO">0</property>-->
        <!--<property name="useZKSwitch">true</property>-->

        <!--connection -->
        <!--<property name="charset">utf-8</property>-->
        <!--<property name="maxPacketSize">4194304</property>-->
        <!--<property name="txIsolation">3</property>-->

        <!--consistency-->
        <!-- check the consistency of table structure between nodes,default not -->
        <property name="checkTableConsistency">0</property>
        <!-- check periodt, he default period is 60000 milliseconds -->
        <property name="checkTableConsistencyPeriod">60000</property>
        <!-- 1 check the consistency of global table, 0 is not -->
        <property name="useGlobleTableCheck">0</property>
        <property name="glableTableCheckPeriod">86400000</property>

        <!-- heartbeat check period -->
        <property name="dataNodeIdleCheckPeriod">300000</property>
        <property name="dataNodeHeartbeatPeriod">10000</property>

        <!-- processor check conn-->
        <property name="processorCheckPeriod">1000</property><!-- unit millisecond -->
        <property name="sqlExecuteTimeout">300</property><!-- unit second -->
        <property name="idleTimeout">1800000</property><!-- unit millisecond -->

        <!-- transaction log -->
        <!-- 1 enable record the transaction log, 0 disable -->
        <property name="recordTxn">0</property>
        <!--<property name="transactionLogBaseDir">/txlogs</property>-->
        <!--<property name="transactionLogBaseName">server-tx</property>-->
        <!--<property name="transactionRatateSize">16</property>&lt;!&ndash; unit M &ndash;&gt;-->

        <!-- XA transaction -->
        <!-- use XA transaction ,if the mysql service crash,the unfinished XA commit/rollback will retry for several times
       it is the check period for ,default is 1000 milliseconds-->
        <property name="xaSessionCheckPeriod">1000</property>
        <!-- use XA transaction ,the finished XA log will removed. the default period is 1000 milliseconds-->
        <property name="xaLogCleanPeriod">1000</property>
        <!-- XA Recovery Log path -->
        <!--<property name="XARecoveryLogBaseDir">/tmlogs/</property>-->
        <!-- XA Recovery Log name -->
        <!--<property name="XARecoveryLogBaseName">tmlog</property>-->

        <!-- true is use JoinStrategy, default false-->
        <property name="useJoinStrategy">true</property>
        <property name="nestLoopConnSize">4</property>
        <property name="nestLoopRowsSize">2000</property>

        <!-- off Heap unit:bytes-->
        <property name="bufferPoolChunkSize ">4096</property>
        <property name="bufferPoolPageNumber ">512</property>
        <property name="bufferPoolPageSize ">2097152</property>

        <!-- sql statistics-->
        <!-- 1 means use SQL statistics, 0 means not -->
        <property name="useSqlStat">0</property>
        <!--<property name="bufferUsagePercent">80</property>-->
        <!--<property name="clearBigSqLResultSetMapMs">600000</property>-->
        <!--<property name="sqlRecordCount">10</property>-->
        <!--<property name="maxResultSet">524288</property>-->

        <!-- backSocket unit:bytes-->
        <!--<property name="backSocketSoRcvbuf ">4194304</property>-->
        <!--<property name="backSocketSoSndbuf">1048576</property>-->
        <!--<property name="backSocketNoDelay ">1</property>-->

        <!-- frontSocket-->
        <!--<property name="frontSocketSoRcvbuf ">1048576</property>-->
        <!--<property name="frontSocketSoSndbuf">4194304</property>-->
        <!--<property name="frontSocketNoDelay ">1</property>-->


    </system>

    <!-- firewall config -->
    <!--
    <firewall>
    <whitehost>
          <host host="127.0.0.1" user="root"/>
          <host host="0:0:0:0:0:0:0:1" user="root"/>
       </whitehost>
       <blacklist check="true">
       <property name="selelctAllow">false</property>
       </blacklist>
    </firewall>
    -->
    <user name="man1">
        <property name="password">654321</property>
        <property name="manager">true</property>
        <!-- manager user can't set schema-->
    </user>

    <user name="root">
        <property name="password">123456</property>
        <property name="schemas">TESTDB</property>

        <!-- table's DML privileges  INSERT/UPDATE/SELECT/DELETE -->
        <!--
        <privileges check="false">
            <schema name="TESTDB" dml="0110" >
                <table name="tb01" dml="0000"></table>
                <table name="tb02" dml="1111"></table>
            </schema>
        </privileges>
         -->
    </user>

    <user name="user">
        <property name="password">user</property>
        <property name="schemas">TESTDB</property>
        <property name="readOnly">true</property>
    </user>

</dble:server>

results matching ""

    No results matching ""