MyCat系列二--配置文件之server.xml
yuyutoo 2025-04-30 20:55 16 浏览 0 评论
MyCat系列二--配置文件之server.xml
从【安装与基本使用】一文中,可以看到MyCat运行,需要进行一些配置文件的相关配置,本文将重点介绍配置文件server.xml的基本元素信息,尽量了解一些标签的含义,并针对一些做示例演示,由于加深了解与掌握。
- server.xml
Server.xml存储了所有MyCat需要的基本系统配置信息。主要含有如下几个标签:
1.1 user标签
该标签主要用于定义登录 mycat 的用户和权限。
上一篇文章中的示例,此标签定义如下:
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<property name="defaultSchema">TESTDB</property>
<privileges check="false">
<schema name="TESTDB" dml="1111" >
</schema>
</privileges>
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
<property name="defaultSchema">TESTDB</property>
</user>
这里配置了两个可以来连接的用户
用户1 :root 密码:123456
用户2 :user 密码:user 给予了此用户TESTDB数据库的只读权限
注意:这里的testdb不一定是数据库上的真实库名,可以任意指定,只要和schema.xml的配置文件中的库名统一即可。
1.1.1 property子标签
具体声明的属性值定义:
1.1.1.1 password
登录的密码,也就是连接Mycat的密码
例如:
<property name="password">123456</property>
1.1.1.2 readOnly
限制用户是否只是可读的,值为true/false。
例如:
<property name="readOnly">true</property>
1.1.1.3 benchmark
连接服务降级处理基准值,当前端的整体 connection 数达到基准值是, 对来自该账户的请求开始拒绝连接,0 或不设表示不限制。
例如:
<property name="benchmark">5</property>
1.1.1.4 usingDecrypt
是否对密码加密。默认0表示不开启,1表示开启密码加密,同时使用加密程序对密码加密。
例如:
<proerty name="usingDecrypt">0</property>
1.1.1.5 schemas
和schema.xml中的配置关联,多个用逗号分开
例如:
<property name="schemas">TESTDB</property>
1.1.2 privileges子标签
该子标签用于对用户的 schema 及 下级的 table 进行精细化的 DML 权限控制,privileges 标签中的 check 属性是用于标识是否开启 DML 权限检查, 默认 false 标识不检查,由于 Mycat 一个用户的 schemas 属性可配置多个 schema ,所以 privileges 的下级标签 schema 标签同样可配置多个,对多库多表进行细粒度的 DML 权限控制。
DML 权限控制,顺序指的是insert,update,select,delete ,使用一个四位数字表示,数字的每一位值为0(禁止)或者1(允许)。如果设置了 schema的 DML权限控制 , 但只设置了个别 table 的 DML权限控制,那么,其它table会自动继承 schema 的 DML 权限控制属性;或者未设置任何table的 DML权限控制,那么,所有table会自动继承 schema 的 DML 权限控制属性。
1.1.3 示例
如无特殊说明,以下示例中仅仅列出示例相关属性或者标签需要修改的配置。
1.1.3.1 usingDecrypt
出于安全考虑,当需要对mycat用户登录密码进行加密,防止泄露,需要启用该属性。加密的密码需要执行如下命令进行获取:
java -cp Mycat-server-1.6.7.6-release.jar io.mycat.util.DecryptUtil 0:root:123456
注:
Mycat-server-1.6.7.6-release.jar在MyCat解压后的D:\mycat\lib下。
注:加密的密码显示在最后一行:
GO0bnFVWrAuFgr1JMuMZkvfDNyTpoiGU7n/Wlsa151CirHQnANVk3NzE3FErx8v6pAcO0ctX3xFecmSr+976QA==
将server.xml中用户root的配置修改为如下,这里仅列出修改的蓝色部分:
<property name="password">GO0bnFVWrAuFgr1JMuMZkvfDNyTpoiGU7n/Wlsa151CirHQnANVk3NzE3FErx8v6pAcO0ctX3xFecmSr+976QA==</property>
<property name="usingDecrypt">1</property>
之后,重启MyCat服务:
mycat restart
尝试使用原来的配置进行连接登录,正常登录,如下图所示。
如果密码仍然为设置为明文123456,但usingDecrypt设置为开启,如下:
<property name="password">123456</property>
<property name="usingDecrypt">1</property>
重启MyCat服务,会发现启动异常。
mycat restart
查看日志wrapper.log,会看到如下信息:
Caused by: io.mycat.config.util.ConfigException: user root passwrod need to decrype ,but decrype password is wrong !
1.1.3.2 benchmark
设置为如下:
<property name="benchmark">5</property>
重启MyCat服务,并进行数据库连接,发现当连接数为5的时候,报告如下信息,拒绝连接:
1.1.3.3 privileges
修改配置为如下:
<privileges check="true">
<schema name="TESTDB" dml="0000" >
<table name="t_vote" dml="0100"></table>
<table name="t_user" dml="1110"></table>
</schema>
</privileges>
针对表t_vote,赋予了Update权限,无Insert,Select,Delete权限。
针对表t_user,赋予了Insert,Select,Update权限,无Delete权限。
重启MyCat服务。然后,我们进行如下SQL语句执行验证:
insert into t_vote(id,province) values ('hn','hunan');
update t_vote set id='hn1' where province='hunan';
select * from t_vote;
delete from t_vote where id='hn1';
insert into t_user(id,name) values (7,'刘娟');
update t_user set name='刘娟娟' where id=7;
select * from t_user;
delete from t_user where id=7;
1.2 system标签
此标签内嵌套的所有 property 子标签都与系统配置有关。
1.2.1 property子标签
具体声明的属性值定义:
1.2.1.1 charset(Mysql 连接相关属性)
字符集设置。如果需要配置 utf8mb4等特殊字符集可以在
index_to_charset.properties 中配置,配置数据库短的字符集 ID=字符集
例如:224=utf8mb4
配置字符集的时候一定要坚持 mycat 的字符集与数据库端的字符集是一致的,可以通过变量来查询:
show variables like 'collation_%';
show variables like 'character_set_%';
例如:
<property name="charset">utf8</property>
1.2.1.2 defaultSqlParser
用来指定默认的解析器。目前的可用的取值有:druidparser 和 fdbparser。使用的时候可以选择其中的一种,目前一般都使用 druidparser。
注:1.3版本解析器默认为 fdbparser,1.4版本默认为 druidparser,1.4版本以后 fdbparser 作废。
例如:
<property name="defaultSqlParser ">druidparser</property>
1.2.1.3 processors
主要用于指定系统可用的线程数,默认值为机器 CPU 核心线程数。主要影响 processorBufferPool、
processorBufferLocalPercent、processorExecutor 属性。NIOProcessor 的个数也是由这个属性定义的,所以调优的时候可以适当的调高这个属性。
例如:
<property name="processors">10</property>
1.2.1.4 processorBufferChunk
指定每次分配 Socket Direct Buffer 的大小,默认是 4096 个字节。该属性也影响 buffer pool 的长度。如果一次性获取的数过大,buffer 不够用,经常出现警告,则可以适当调大。
例如:
<property name="processorBufferChunk ">6000</property>
1.2.1.5 processorBufferPool
指定 bufferPool 计算比例值。由于每次执行 NIO 读、写操作都需要使用到 buffer,系统初始化的时候,会建立一定长度的 buffer 池来加快读、写的效率,减少建立 buffer 的时间。
Mycat 中有两个主要的 buffer 池:
- BufferPool
- ThreadLocalPool
BufferPool 由 ThreadLocalPool 组合而成,每次从 BufferPool 中获取 buffer 都会优先获取ThreadLocalPool 中的 buffer,未命中之后才会去获取 BufferPool 中的 buffer。也就是说 ThreadLocalPool 是作为 BufferPool 的二级缓存,每个线程内部自己使用的。当然,这其中还有一些限制条件需要线程的名字是由$_开头。然而,BufferPool 上的 buffer 则是每个 NIOProcessor 都共享的。
默认这个属性的值为: 默认 bufferChunkSize(4096) * processors 属性 * 1000
BufferPool 的总长度 = bufferPool / bufferChunk。
若 bufferPool 不是 bufferChunk 的整数倍,则总长度为前面计算得出的商 + 1
假设系统线程数为 4,其他都为属性的默认值,则:
bufferPool = 4096 * 4 * 1000
BufferPool 的总长度 : 4000 = 16384000 / 4096
例如:
<property name="processorBufferPool">16384000</property>
1.2.1.6 processorBufferLocalPercent
用来控制分配ThreadLocalPool 的大小,但其也并不是一个准确的值,也是一个比例值。这个属性默认值为 100。
线程缓存百分比 = bufferLocalPercent / processors 属性。
例如,系统可以同时运行 4 个线程,使用默认值,则根据公式每个线程的百分比为 25。最后根据这个百分比来计算出具体的 ThreadLocalPool 的长度公式如下:
ThreadLocalPool 的长度 = 线程缓存百分比 * BufferPool 长度 / 100
假设 BufferPool 的长度为 4000,其他保持默认值。
那么最后每个线程建立上的 ThreadLocalPool 的长度为: 1000 = 25 * 4000 / 100
例如:
<property name="processorBufferLocalPercent">100</property>
1.2.1.7 processorExecutor
用于指定 NIOProcessor 上共享的 businessExecutor 固定线程池大小。mycat 在需要处理一些异步逻辑的时候会把任务提交到这个线程池中。新版本中这个连接池的使用频率不是很大了,可以设置一个较小的值。
例如:
<property name="processorExecutor">4</property>
1.2.1.8 sequnceHandlerType
指定使用 Mycat 全局序列的类型。0 为本地文件方式,1 为数据库方式,2 为时间戳序列方式,3 为分布式ZK ID 生成器,4 为 zk 递增 id 生成。
从 1.6 增加 两种 ZK 的全局 ID 生成算法。
例如:
<property name="sequnceHandlerType ">1</property>
1.2.1.9 packetHeaderSize(Mysql 连接相关属性)
指定 Mysql 协议中的报文头长度。默认 4
例如:
<property name="packetHeaderSize">8</property>
1.2.1.10 maxPacketSize(Mysql 连接相关属性)
指定 Mysql 协议可以携带的数据最大长度。默认 16M。
例如:
<property name="maxPacketSize">8388608</property>
1.2.1.11 idleTimeout(Mysql 连接相关属性)
指定连接的空闲超时时间。某连接在发起空闲检查下,发现距离上次使用超过了空闲时间,那么这个连接会被回收,就是被直接的关闭掉。默认 30 分钟,单位毫秒。
例如:
<property name="idleTimeout">3600000</property>
1.2.1.12 txIsolation(Mysql 连接相关属性)
txIsolation : 前端连接的初始化事务隔离级别,只在初始化的时候使用,后续会根据客户端传递过来的属性对后端数据库连接进行同步。默认为 REPEATED_READ,设置值为数字默认 3。
READ_UNCOMMITTED = 1;
READ_COMMITTED = 2;
REPEATED_READ = 3;
SERIALIZABLE = 4;
例如:
<property name="txIsolation">2</property>
1.2.1.13 sqlExecuteTimeout(Mysql 连接相关属性)
SQL 执行超时的时间,Mycat 会检查连接上最后一次执行 SQL 的时间,若超过这个时间则会直接关闭这连接。默认时间为 300 秒,单位秒。
例如:
<property name="sqlExecuteTimeout">360</property>
1.2.1.14 processorCheckPeriod(心跳属性--系统调优)
清理 NIOProcessor 上前后端空闲、超时和关闭连接的间隔时间。默认是 1 秒,单位毫秒。
例如:
<property name="processorCheckPeriod">2000</property>
1.2.1.15 dataNodeIdleCheckPeriod(心跳属性--系统调优)
对后端连接进行空闲、超时检查的时间间隔,默认是 300 秒,单位毫秒。
例如:
<property name="dataNodeIdleCheckPeriod">310000</property>
1.2.1.16 dataNodeHeartbeatPeriod(心跳属性--系统调优)
对后端所有读、写库发起心跳的间隔时间,默认是 10 秒,单位毫秒。
例如:
<property name="dataNodeHeartbeatPeriod">8000</property>
1.2.1.17 bindIp(服务相关属性)
mycat 服务监听的 IP 地址,默认值为 0.0.0.0。
例如:
<property name="bindIp">0.0.0.0</property>
1.2.1.18 serverPort(服务相关属性)
定义 mycat 的使用端口,既是连接MyCat的端口,默认值为 8066。
例如:
<property name="serverPort">8066</property>
1.2.1.19 managerPort(服务相关属性)
定义 mycat 的管理端口,既是连接mycat管理地址的端口,默认值为 9066。
例如:
<property name="managerPort">9066</property>
1.2.1.20 fakeMySQLVersion
mycat 模拟的 mysql 版本号,默认值为 5.6 版本,如非特需,不要修改这个值,目前支持设置 5.5,5.6 版本,其他版本可能会有问题。此特性从 1.6 版本开始支持。
1.2.1.22 useGlobleTableCheck
全局表一致性检测,1 为开启一致性检测、0 为关闭。
原理是通过在全局表增加_MYCAT_OP_TIME 字段来进行一致性检测,类型为 bigint,create 语句通过 mycat执行会自动加上这个字段,其他情况请自己手工添加。此特性从 1.6 版本开始支持。
例如:
<property name="useGlobleTableCheck">0</property>
1.2.1.23 useOffHeapForMerge
此特性从 1.6 版本开始支持。使用非堆内存(Direct Memory)处理跨分片结果集的 Merge/order by/group by/limit,通过 server.xml 中的 useOffHeapForMerge 参数配置是否启用非堆内存处理跨分片结果集,1 为开启, 0 为关闭。
例如:
<property name="useOffHeapForMerge">1</property>
1.2.1.24 handleDistributedTransactions
分布式事务开关,0 为不过滤分布式事务,1 为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2 为不过滤分布式事务,但是记录分布式事务日志。主要应用场景,主要为了控制是否允许跨库事务。此特性从 1.6 版本开始支持。
例如:
<property name="handleDistributedTransactions">0</property>
1.2.1.25 nonePasswordLogin
0为需要密码登陆、1为不需要密码登陆 ,默认为0。
例如:
<property name="nonePasswordLogin">0</property>
1.2.2 示例
如无特殊说明,以下示例中仅仅列出示例相关属性或者标签需要修改的配置。
1.2.2.1 serverPort
设置为如下:
<property name="serverPort">8067</property>
重启MyCat服务,并尝试使用端口8067进行数据库连接,成功。
我们查看一下日志mycat.log,可以看到如下信息:
实际上,截图所示的就是子标签的信息。可以看到serverPort现在的确是8067。
1.2.2.2 nonePasswordLogin
设置为如下:
<property name="nonePasswordLogin">0</property>
重启MyCat服务,之后使用如下命令登录数据库:
密码验证失败,导致登录失败。
再次将设置为如下:
<property name="nonePasswordLogin">1</property>
重启MyCat服务,继续使用上述相同命令登录数据库:
无需密码即可登录数据库,并可以进行正常数据库操作。
等等,这里好像有个问题,我们的数据库需要密码验证通过才能正常登录,如果这里不用密码了,就可以登录数据库,那岂不是很不安全?难道这是一个重大缺陷?
接下来,带着此疑问,让我们针对前面权限示例的相关语句再重新执行一下:
发现了什么?对表的权限设置与前面示例相同。回头看看配置中的user标签,会发现如下信息(蓝色字体):<user name="root" defaultAccount="true">
看到这里,是否就明白了呢?不是不用密码,而是跳过了你手动输入密码的环节,直接使用了缺省账号的信息了。这里就是使用的缺省账号root。
相关推荐
- 《保卫萝卜2》安卓版大更新 壕礼助阵世界杯
-
《保卫萝卜2:极地冒险》本周不仅迎来了安卓版本的重大更新,同时将于7月4日本周五,带来“保卫萝卜2”安卓版本世界杯主题活动的火热开启,游戏更新与活动两不误。一定有玩家会问,激萌塔防到底进行了哪些更新?...
- 儿童手工折纸:胡萝卜,和孩子一起边玩边学carrot
-
1、准备两张正方形纸,一橙一绿,对折出折痕。2、橙色沿其中一条对角线如图折两三角形。3、把上面三角折平,如图。4、绿色纸折成三角形。5、再折成更小的三角形。6、再折三分之一如图。7、打开折纸,压平中间...
- 《饥荒》食物代码有哪些(饥荒最新版代码总汇食物篇)
-
饥荒游戏中,玩家们需要获取各种素材与食物,进行生存。玩家们在游戏中,进入游戏后按“~”键调出控制台使用代码,可以直接获得素材。比如胡萝卜的代码是carrot,玉米的代码是corn,南瓜的代码是pump...
- Skyscanner:帮你找到最便宜机票 订票不求人
-
你喜欢旅行吗?在合适的时间、合适的目的地,来一场说走就走的旅行?机票就是关键!Skyscanner这款免费的手机应用,在几秒钟内比较全球600多家航空公司的航班安排、价格和时刻表,帮你节省金钱和时间。...
- 小猪佩奇第二季50(小猪佩奇第二季英文版免费观看)
-
Sleepover过夜Itisnighttime.现在是晚上。...
- 我在民政局工作的那些事儿(二)(我在民政局上班)
-
时间到了1997年的秋天,经过一年多的学习和实践,我在处理结婚和离婚的事情更加的娴熟,也获得了领导的器重,所以我在处理平时的工作时也能得心应手。这一天我正在离婚处和同事闲聊,因为离婚处几天也遇不到人,...
- 夏天来了就你还没瘦?教你不节食13天瘦10斤的哥本哈根减肥法……
-
好看的人都关注江苏气象啦夏天很快就要来了你是否和苏苏一样身上的肉肉还没做好准备?真是一个悲伤的故事……下面这个哥本哈根减肥法苏苏的同事亲测有效不节食不运动不反弹大家快来一起试试看吧~DAY1...
- Pursuing global modernization for peaceful development, mutually beneficial cooperation, prosperity for all
-
AlocalworkeroperatesequipmentintheChina-EgyptTEDASuezEconomicandTradeCooperationZonei...
- Centuries-old tea road regains glory as Belt and Road cooperation deepens
-
FUZHOU/ST.PETERSBURG,Oct.2(Xinhua)--NestledinthepicturesqueWuyiMountainsinsoutheastChi...
- Ftrace function graph简介(flat function)
-
引言由于android开发的需要与systrace的普及,现在大家在进行性能与功耗分析时候,经常会用到systrace跟pefetto.而systrace就是基于内核的eventtracing来实...
- JAVA历史版本(java各版本)
-
JAVA发展1.1996年1月23日JDK1.0Java虚拟机SunClassicVM,Applet,AWT2.1997年2月19日JDK1.1JAR文件格式,JDBC,JavaBea...
- java 进化史1(java的进阶之路)
-
java从1996年1月第一个版本诞生,到2022年3月最新的java18,已经经历了27年,整整18个大的版本。很久之前有人就说java要被淘汰,但是java活到现在依然坚挺,不知道java还能活...
- 学习java第二天(java学完后能做什么)
-
#java知识#...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 《保卫萝卜2》安卓版大更新 壕礼助阵世界杯
- 儿童手工折纸:胡萝卜,和孩子一起边玩边学carrot
- 《饥荒》食物代码有哪些(饥荒最新版代码总汇食物篇)
- Skyscanner:帮你找到最便宜机票 订票不求人
- 小猪佩奇第二季50(小猪佩奇第二季英文版免费观看)
- 我在民政局工作的那些事儿(二)(我在民政局上班)
- 夏天来了就你还没瘦?教你不节食13天瘦10斤的哥本哈根减肥法……
- Pursuing global modernization for peaceful development, mutually beneficial cooperation, prosperity for all
- Centuries-old tea road regains glory as Belt and Road cooperation deepens
- 15 THE NUTCRACKERS OF NUTCRACKER LODGE (CONTINUED)胡桃夹子小屋里的胡桃夹子(续篇)
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)