#1. server.xml配置文件
server.xml配置文件分为三个标签部分:
- system标签:系统配置信息
- user标签:用户配置信息
- firewall标签:防火墙配置信息
##1.1 system标签
属性 | 取值 | 含义 |
---|---|---|
charset | utf8,gbk等 | 设置MyCat的字符集,字符集需要与MySQL的字符集保持一致 |
nonePasswordLogin | 0,1 | 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户 |
useHandshakeV10 | 0,1 | 使用该选项主要为了兼容高版本的jdbc驱动,是否使用HandshakeV10来与client进行通信 1为是 0为否 |
useSqlStat | 0,1 | 是否开启SQL的实时统计, 1为开启 0为关闭 |
useGlobleTableCheck | 0,1 | 是否开启全局表的一致性检测。0为开启、1为关闭 |
sqlExecuteTimeout | 默认300秒 | SQL语句执行的超时时间,单位 s |
sequenceHandlerType | 0,1,2 | 用于指定MyCat全局序列类型,0:本地文件、1:数据库方式、2:时间戳列方式,默认为本地文件方式(主要用于测试) |
sequnceHandlerPattern | 正则表达式 | 必须带有MYCATSEQ_或者 mycatseq_进入序列匹配流程 注意MYCATSEQ_有空格的情况 |
subqueryRelationshipCheck | true,false | 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false |
useCompression | 0,1 | 开启MySQL压缩协议,0:关闭、1:关闭 |
fakeMySQLVersion | 5.5,5.6等 | 设置模拟的MySQL版本号 |
processors | 1,2…… | 指定系统的可用线程数,默认值为CPU核心 * 每个核心运行形成数量。processors会影响processorBufferPool,processorExecutor属性,所以在性能调优时可以适当修改processors值 |
processorBufferChunk | 指定每一次分配Socker Direct Buffer默认值为4096字节,也会影响BufferPool长度,如果一次性获取字节过多导致buffer不够用,则会出现警告,可以调大值 | |
processorExecutor | 指定NIOProcessor上共享businessExecutor固定线程池的大小;MyCat把异步交给businessExecutor线程池中,在新版本MyCat中这个连接池使用频次不高,可以把值调小 | |
packetHeaderSize | 指定MySQL协议中的报文长度,默认4个字节 | |
maxPackerSize | 指定MySQL协议可以携带的数据量最大大小,默认值为16M | |
idleTimeout | 30 | 指定连接的空闲时间的超时长度;如果超时,将关闭资源并回收,默认30分钟 |
serverPort | 8066 | 定义MyCat的使用端口,默认8066 |
managerPort | 9066 | 定义MyCat的管理端口,默认9066 |
SQL实时统计开启后,MyCat会自动统计SQL语句的执行情况 。可以通过mysql -h IP地址 -P 9066 -u 用户名 -p密码命令在非mycat安装节点中查看MyCat的执行SQL的整体情况;命令:show @@sql、show @@sql.slow、show @@sql.sum等
##1.2 user标签
| 属性 |含义 |
| --- | --- |
| password |密码 |
| schemas |逻辑库 |
| readOnly |是否只读(true/false) |
| benchmark |指定前端的整体连接数量,0或不设置表示不限制 |
| usingDecrypt |是否对密码进行加密,0:否(默认) 1:是 |
:name为用户名,defaultAccount是否为默认用户
表级 DML 权限设置:对用户的Schema及下级的table进行精细化的DML权限控制
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
- privileges节点中的check属性是用于标识是否开启DML权限检查,默认false不开启
- 权限修饰符四位数(0000 - 1111),对应的操作是IUSD(增改查删)。同时配置了库和表的权限,就近原则以表权限为准
>privileges节点不配置,等同于check=false,由于MyCat一个用户的schema属性可配置多个schema,所以privileges的下级节点schema节点同样可配置多个,对多库多表进行细粒度的DML权限控制
例1:开启密码加密
密码加密必须依赖于./lib/Mycat-server-1.6.7.5-release.jar
java -cp Mycat-server-1.6.7.5-release.jar io.mycat.util.DecryptUtil 加密格式:用户名:密码
加密格式有两种:
1.主机号:用户名:密码
0.用户名:密码
<user name="root" defaultAccount="true">
<property name="password">GO0bnFVWrAuFgr1JMuMZkvfDNyTpoiGU7n/Wlsa151CirHQnANVk3NzE3FErx8v6pAcO0ctX3xFecmSr+976QA==</property>
<property name="schemas">WQLDB</property>
<property name="usingDecrypt">1</property>
</user>
##1.3 firewall标签
firewall标签用于定义防火墙:
- whitehost:定义IP白名单
- blocklist:SQL黑名单
<firewall>
<!--IP白名单配置-->
<whitehost>
<host host="1*7.0.0.*" user="root"/>
</whitehost>
<!--SQL黑名单配置-->
<blacklist check="false">
<property name="selectAllow">flase</property>
</blacklist>
</firewall>
白名单:
1,host:IP地址(可以使用*作为通配符)
2,user:用户名
SQL黑名单拦截配置项:check为是否开启(true:开启,false:关闭)
配置项 | 缺省值 | 含义 |
---|---|---|
selelctAllow | true | 是否允许执行SELECT语句 |
selectIntoAllow | true | SELECT查询语句中是否允许Into子句 |
deleteAllow | true | 是否允许执行DELETE语句 |
insertAllow | true | 是否允许执行INSERT语句 |
replaceAllow | true | 是否允许执行replace语句 |
…… | …… | …… |
#2. schema.xml配置文件
schema.xml作为MyCat中最重要的配置文件之一,涵盖了MyCat的逻辑库、表、分片规则、分片节点及数据源的配置
##2.1 schema标签
<!--逻辑库-->
<schema name="WQLDB" checkSQLschema="true" sqlMaxLimit="100">
<!--逻辑表-->
<table name="WQL_TB" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
</schema>
schema标签用于定义MyCat实例中的逻辑库,一个MyCat实例中,可以有多个逻辑库,可以通过schema标签来划分不同的逻辑库。MyCat逻辑库的概念等同于MySQL中database的概念。在需要操作某个逻辑库下的表时,也需要切换逻辑库 schema标签用于定义MyCat实例中的逻辑库,一个MyCat实例中,可以有多个逻辑库,可以通过schema标签来划分不同的逻辑库。MyCat逻辑库的概念等同于MySQL中database的概念。在需要操作某个逻辑库下的表时,也需要切换逻辑库
schema标签的属性:
属性 | 含义 |
---|---|
name | 指定逻辑库的库名 |
checkSQLschema | 是否自动去除逻辑库的库名(true/false),例:如果为true,"select * from ITWQL.TB_TEST"则MyCat会自动把schema字符(ITWQL)去除。如果指定一个不存在的schema就不会自动去除(会报错) |
sqlMaxLimit | 当改属性设置为某个值时,每次执行SQL语句如果没有自定义加上limit语句,MyCat会自动在SQL语句后面加上limit。这样主要是避免检索全部数据 |
table标签定义MyCat中逻辑库schema下的逻辑表,所有需要拆分的表都需要在table标签中定义
<table name="WQL_TB" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
table属性:
属性名 | 值 | 数量限制 |
---|---|---|
name | String | {1} |
dataNode | String | {1…*} |
rule | String | {0…1} |
ruleRequired | boolean | {0…1} |
primaryKey | String | {1} |
type | String | {0…1} |
autoIncrement | boolean | {0…1} |
subTables | String | {1} |
needAddLimit | boolean | {0…1} |
1)name
定义逻辑表的表名,在逻辑库下必须唯一
2)dataNode
定义逻辑表所属的datanode,该属性与dataNode标签中的name属性的值对应。如果一张表拆分的数据存储在多个数据节点上,使用","分隔
3)rule
该属性用于指定逻辑表的分片规则的名称,规则的名字是在rule.xml文件中定义的,必须与tableRule标签中的name属性对应
4)ruleRequired
该属性用于指定表是否绑定分片规则,如果配置为true,但是没有具体的rule,程序会报错
5)primaryKey
逻辑表对应真实表的主键
注:分片规则是使用主键进行分片,使用主键进行查询时,就会发送查询语句到配置的所有的datanode上;如果使用该属性配置真实表的主键,那么MyCat会缓存主键与具体datanode的信息,再次使用主键查询就不会进行广播查询了,而是直接将SQL发送给具体的datanode
6)type
该属性定义了逻辑表的类型,目前只有全局表和普通表。
- 全局表:type值为global
- 普通表:无需值
7)autoIncrement
- mysql对非自增长主键,使用1ast_insert_id()是不会返回结果的,只会返回0。所以,只有定义了自增长主键的表,才可以用last_insert_id()返回主键值
-
mycat提供了自增长主键功能,但是对应的mysq1节点上数据表,没有auto_increment,那么在mycat层调用last_insert_id()也是不会返回结果的
如果使用这个功能,则最好配合数据库模式的全局序列,使用autoIncrement="true"指定该表使用自增长主键,这样Mycat才不会抛出"分片键找不到"的异常。autoIncrement的默认值为false.
8)needAddLimit
指定表是否需要自动在每个语句的后面加上limit限制,默认为true
##2.2 dataNode标签
dataNode标签中定义了MyCat中的数据节点,也就是我们通常说的数据分片。一个dataNode标签就是一个独立的数据分片
<dataNode name="dn1" dataHost="localhost1" database="wqldb" />
具体的属性:
属性 | 含义 | 描述 |
---|---|---|
name | 数据节点的名称 | 需要唯一 |
dataHost | 数据库实例主机名称 | 引用自database标签中name属性 |
database | 定义分片所属的真实数据库 |
##2.3 dataHost标签
dataHost标签作为MyCat逻辑库配置的底层标签,直接定义了具体的数据库实例、读写分离、心跳语句
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<!--心跳检测-->
<heartbeat>select user()</heartbeat>
<!--writeHost数据写入节点,也就是数据源-->
<writeHost host="hostM1" url="jdbc:mysql://192.168.68.151:3306" user="root"
password="123456789">
</writeHost>
</dataHost>
dataHost的属性:
属性 | 含义 | 描述 |
---|---|---|
name | 数据节点名称 | 唯一 标识,供上层标签使用 |
maxCon | 最大连接数 | 内部的writeHost,readHost都会使用这个属性 |
minCon | 最小连接数 | 内部的writeHost,readHost初始化连接池的大小 |
balance | 负载均衡类型 | 取值0,1,2,3 |
writeType | 写操作分发方式 | 0:读写操作都转发到第1台writeHost1,假如writeHost1挂了会切换到writeHost2 1:所有的写操作都随机的发送到配置的writeHost上 |
dbType | 后端数据库类型 | MySQL,MongoDB,Oracle |
dbDriver | 数据库驱动 | 指定连接后端数据库的驱动,目前可选值有native和JDBC |
switchType | 数据库切换策略 | 取值-1,1,2,3 |
注:navite执行的是二进制的MySQL协议,可以使用MySQL和MariaDB。其他类型的数据库需要使用JDBC(需要在MyCat/lib目录下加入驱动jar)
子标签:
1. beartbeat
2. writeHost,readHost
1)beartbeat标签
配置MyCat与后端数据库的心跳,用于检测后端数据库的状态。heartbeat用于配置心跳检测语句
2)writeHost,readHost标签
指定后端数据库的相关配置,用于实例化后端连接池。writeHost指定写实例,readHost指定读实例
在一个dataHost中可以定义多个writeHost和readHost。但是如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost也将不可用
属性:
属性名 | 含义 | 取值 |
---|---|---|
host | 实例主机标识 | 对于writeHost一般使用M1;对于readHost,一般使用S1 |
url | 后端数据库连接地址 | 如果数据库驱动是native,使用ip:port 如果是JDBC,使用jdbc:mysql://ip:port/ |
user | 数据库用户名 | 按数据库用户名自行填写 |
password | 数据库密码 | 按数据库密码自行填写 |
weight | 权重 | 在readHost中作为读节点权重 |
usingDecrypt | 密码加密 | 默认0:否 1:是 |
#3. rule.xml配置文件
rule.xml中定义所有库和表切片拆分的规则,在使用过程中可以灵活的使用分片算法,或者对同一个算法使用不同的参数,它让分片过程可配置化
##3.1 tableRule标签
<tableRule name="rule1">
<rule>
<columns>id</columns>
<algorithm>func1</algorithm>
</rule>
</tableRule>
- nam:指定分片算法的名称
- rule:定义分片算法的具体内容
- columns:指定对应的表中用于分片的列名
- algorithm:对应function中指定的算法
##3.2 Function标签
<function name="crc32slot"
class="io.mycat.route.function.PartitionByCRC32PreSlot">
<property name="count">2</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->
</function>
- name:指定算法的名称,该文件中唯一
- class:指定算法的具体类
- property:属性标签
#4. sequence配置文件
在分库分表的情况下,原有的自增主键已无法满足在集群中全局唯一的主键,因此,MyCat中提高了全局sequence来实现主键唯一性
在MyCat的配置文件中sequence_conf.properties就配置了序列相关配置
sequence主要包含的几种形式:
1. 本地文件方式
2. 数据库方式
3. 本地时间戳方式
4. 其他方式
5. 自增长主键
Comments | NOTHING
Warning: Undefined variable $return_smiles in /www/wwwroot/wql_luoqin_ltd/wp-content/themes/Sakura/functions.php on line 1109