- system (目前reload不会做变更)
- properties
- user (可多值,reload可变更)
- firewall (reload可变更)
- whitehost
- blacklist
- host
模块 | 配置名称 |
配置内容 |
默认值/单位 |
详细作用原理或应用 |
配置范围 |
范围 |
版本变更 |
后端连接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× |
在初始化的时候通过和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引入 |
||
暂时废弃,待重审 |
处理跨分配结果合并是不是采用Direct Memory |
默认1 |
在初始化服务的时候会根据此配置初始化一个内存管理对象,并检查剩余内存的大小 并在执行中影响内存请求时请求到的内存的管理方式,在合并多节点返回数据使用 |
实例 |
2.17.11.0废弃 |
||
暂时废弃,待重审 |
每页内存的大小 |
默认1m |
影响在程序中申请内存的最小单位,在多节点结果合并使用 |
实例 |
2.17.11.0废弃 |
||
暂时废弃,待重审 |
写磁盘缓存大小 |
默认 2K |
在合并结果集内存不够用的时候通过写磁盘来进行缓冲, 这个时候spillsFileBufferSize就是写磁盘流buffer的大小 |
实例 |
2.17.11.0废弃 |
||
暂时废弃,待重审 |
写磁盘目录 | 默认相对路径/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 |
控制最大连接数 |
默认1024 |
大于此连接数之后,建立连接会失败.注意当各个用户的maxcon总和值大于此值时,以当前值为准 |
正整数 |
实例 |
2.18.09.0引入 |
|
processors |
NIO前端处理器的数量 |
默认java虚拟机核数 |
进行前端网络IO吞吐的线程数 |
正整数 |
实例 |
- |
|
backendProcessors |
NIO后端处理器的数量 |
默认java虚拟机核数 |
进行后端网络IO吞吐的线程数 |
正整数 |
实例 |
2.18.02.0引入 |
|
fakeMySQLVersion |
dble模拟mysql版本号 |
默认NULL |
模拟成正常的MySql版本在进行前端协议交互的时候能够使用到 |
MYSQL版本号 |
最好全局,实例也可 |
- |
|
processorExecutor |
前端业务处理线程池数量 |
默认 |
进行前端具体业务处理的线程池大小,负责解析路由下发 |
正整数 |
实例 |
- |
|
backendProcessorExecutor |
后端业务处理线程池数量 |
默认 |
进行后端具体业务处理的线程池大小,负责回收结果集并合并 |
正整数 |
实例 |
2.18.02.0引入 |
|
complexExecutor |
复杂查询后端业务线程池数量 |
默认 |
负责复杂查询或者子命令结果集的回收 |
正整数 |
实例 |
2.18.02.0引入 |
|
sequnceHandlerType |
全局序列(主键)处理器的方式 |
默认2 |
在初始化的时候根据这个配置选择不同的序列生成器进行加载
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引入 |
|
大小写敏感 | true 不敏感 ,其他值敏感 |
在代码里面所有涉及表明判断的时候使用到,如果开启true
大小写不敏感在代码判定的时候都会转化成小写进行判定 |
正整数 |
全局 |
2.17.04.0引入 |
||
使用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 |
字符集 |
utf-8 |
应用于所有字符集相关的部分,包括前端连接和后端连接 |
有效字符集 |
全局 |
- |
maxPacketSize |
包大小限制 |
默认 16×1024×1024 |
前后端管道建立的时候用作参数使用 |
正整数 |
全局 |
- |
|
txIsolation |
隔离级别 |
默认 3 |
执行具体SQL的时候会比较前后端连接, 如果不一致将会执行session级别的事务set |
1-READ_UNCOMMITTED |
全局 |
- |
|
一致性检查 | checkTableConsistency |
表格一致性检查 |
默认0 |
如果值为1,那么在服务初始化的时候会启动一个定时任务,在 定时任务会检查DB是不是存在,表格是不是存在,表结构是否一致 |
1-是,0-f否 |
实例 |
- |
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引入 |
viewPersisten |
视图记录本地文件名 |
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引入 |
|
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 引入 |
|
废弃配置 |
|
缓冲池类型 |
|
在服务初始化的时候根据这个值确定缓冲池的类型 0,直接缓冲块 1,6个队列缓冲 (实际1未完成,删除) |
2.17.04.0废弃 |
||
|
启用结果集流输出,不经过合并模块 |
默认 0 |
有bug,无应用场景,废弃 |
2.17.04.0废弃 |
|||
暂时废弃,待重审 |
系统预留内存 |
384M |
在启用useOffHeapForMerge配置的时候如果系统剩余的内存小于这个配置 ,服务将不会启动(仅在配置useOffHeapForMerge的时候有效) |
2.17.04.0废弃 |
|||
|
SQL拦截器 |
默认 DefaultSqlInterceptor |
拦截SQL,进行统计等处理,默认实现极影响性能,废弃 |
2.17.04.0废弃 |
|||
|
类加载重载检查时间 |
60 |
Catlet 类加载器(废弃) |
2.17.04.0废弃 |
|||
|
SQL解析器sqllogs |
默认 ./logs/sql.txt |
在每个SQL解析的之前都会通过写文件进行记录(废弃) |
2.17.04.0废弃 |
|||
|
默认SQL解析器 |
默认druidparser |
解析器不支持其他,废弃 |
2.17.04.0废弃 |
|||
|
分布式事务开关 |
- |
0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志 |
2.17.04.0废弃 |
配置名称 |
配置内容 |
是否能配多个元素 | 可选项/默认值 |
详细作用原理或应用 |
全局/实例属性 |
name |
用户名 |
否 | 符合mysql用户名规范的字符串 |
用户唯一标识,用于登录校验 |
实例 |
manager |
是否为manager用户 |
否 | true-是 false-否 默认否 |
是否是manager用户,若一个用户是manager用户,则只能登录管理端口,并且只能执行管理端命令,依旧受到白名单制约 |
实例 |
password |
密码 |
否 |
|
用户密码校验 |
实例 |
|
|
|
|
||
maxCon |
负载限制,默认不做限制 |
否 |
|
用户的连接数限制,会在用户验证登录的时候进行校验,默认0,表示不做限制。 特别的,当系统级别的maxCon已经到达上限之后,本用户的maxCon会失效,不能新建连接 |
实例 |
usingDecrypt |
是否启用加密 |
否 | 默认 0否 |
启用加密password项配置通过执行脚本encrypt.sh 0:{user}:{password}的结果进行配置 |
实例 |
配置名称 |
配置内容 |
是否能配多个元素 | 可选项/默认值 |
详细作用原理或应用 |
全局/实例属性 |
name |
用户名 |
否 | 符合mysql用户名规范的字符串 |
用户唯一标识,用于登录校验 |
实例 |
password |
密码 |
否 |
|
用户密码校验 |
实例 |
|
|
|
|
||
maxCon |
负载限制,默认不做限制 |
否 |
|
用户的连接数限制,会在用户验证登录的时候进行校验,默认0,表示不做限制。 特别的,当系统级别的maxCon已经到达上限之后,本用户的maxCon会失效,不能新建连接 |
实例 |
readOnly |
用户只读标志 |
否 |
|
在执行SQL的时候进行判断,如果是readonly不执行查询以外的SQL |
实例 |
schemas |
用户对应使用的schema.xml中的方案 |
否 |
|
用户有权限的schemas 列表,通过,进行分割(db1,db2,db3) |
实例 |
usingDecrypt |
是否启用加密 |
否 | 默认 0否 |
启用加密password项配置通过执行脚本encrypt.sh 0:{user}:{password}的结果进行配置 |
实例 |
privileges |
权限 |
否 |
|
详情见user.privileges |
实例 |
配置名称 |
配置内容 |
多节点 | 可选项/默认值 |
详细作用原理或应用 |
全局/实例 |
check |
是否需要检查 |
否 | 默认否 true-是 false-否 |
如果在进行DML解析并进行用户权限检查的时候,配置为是会严格检查权限情况,配置为否则不会检查 |
实例 |
schema |
用户的schema节点权限情况 |
是 | 空 |
配置为空的情况下默认拥有所有有效schema的权限 |
实例 |
配置名称 |
配置内容 |
多节点 | 可选项/默认值 |
详细作用原理或应用 |
全局/实例 |
name |
schema名称 |
否 |
|
用以标识对应schema |
实例 |
dml |
dml权限 |
否 | 0000 |
权限判断,每一位分别表示INSERT UPDATE SELECT DELETE四种权限 1- 拥有权限 0-没有权限 例如拥有所有权限为1111 |
实例 |
table |
|
是 |
|
如果没有配置,则table继承schema的权限 |
实例 |
配置名称 |
配置内容 |
多节点 | 可选项/默认值 |
详细作用原理或应用 |
全局/实例 |
name |
表格名称 |
否 |
|
在权限判断的时候作为key值 |
实例 |
dml |
dml权限 |
否 | 0000 |
权限判断,每一位分别表示INSERT UPDATE SELECT DELETE四种权限 1- 拥有权限 0-没有权限 例如拥有所有权限为1111 |
实例 |
配置名称 | 是否可以配置多个 | 配置内容 | 默认值 | 配置范围/可选项 | 详细作用原理或应用 | 范围 |
---|---|---|---|---|---|---|
whitehost | 否 | 白名单 | 无 | 白名单的总结点 | 实例 | |
blacklist | 否 | 黑名单 | 无 | 黑名单的总结点 | 实例 |
配置名称 | 节点是否可配多个 | 属性元素 | 元素是否可配多个 | 配置内容 | 默认值 | 配置范围/可选项 | 详细作用原理或应用 | 实例/全局属性 |
---|---|---|---|---|---|---|---|---|
Host | 是 | host | 否 | 白名单某个具体的IP host | 无 | 有效IP地址 如需配置localhost可使用IP host = "0:0:0:0:0:0:0:1" |
类似mysql的权限控制,指定某些IP 只能有某些特定的用户登录进行登录。 如启用白名单,除白名单标注的IP用户 之外其他dble用户均无法登录 |
实例 |
user | 否 | 对应IP host可以允许连接的用户 | 无 | 有效dble用户名,使用','进行分割 例如user="user1,user2,user3" |
配置类型 | 配置名称 | 属性元素 | 是否可以配置多个 | 配置内容 | 默认值 | 配置范围/可选项 | 详细作用原理或应用 | 实例/全局属性 |
---|---|---|---|---|---|---|---|---|
blacklist元素属性 | blacklist | check | 否 | 是否进行黑名单校验 | false | true/false | 如果开启黑名单校验,黑名单中规定的行为SQL都被禁止 影响范围全局,所有用户都无法豁免 |
实例 |
blacklist下挂property | property | name | 是 | 详细的黑名单校验规则 | 无 | 如果开启黑名单校验具体的校验规则将有 所有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此功能无法被使用 | 暂不具有实际意义 |
此项不再需要单独配置,所需要的配置项从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/">
<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">16777216</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><!– unit M –>-->
<!-- 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>