MySQL 运维 5-Mycat 配置
一、schema.xml
1.1 简介
schema.xml 作为 Mycat 中最重要的配置文件之一,涵盖了 Mycat 的逻辑库、逻辑表、分片规则、分片节点即数据源的配置。主要包括一下三组标签
schema 标签
datanode 标签
datahost 标签
1.2 schema 标签
用于定于 Mycat 实例中的逻辑库,一个 Mycat 实例中,可以有多个数据库,可以通过 schema 标签来划分不同的逻辑库。Mycat 中的逻辑库的概念,等同于 MySQL 中的 database 概念没需要操作某个逻辑库下的表时,就需要切换逻辑库,同 MySQL 一样,使用 use xxxx 语句。
核心属性:
name: 自定自定义的逻辑库苦命
checkSQLschema: 在 SQL 语句操作时指定了数据库名称,执行时是否自动去除,true:自动去除,false 不自动去除,即如果有 true 时,我们可以不进入数据库查询.
sqlMaxLimit: 如果未指定 limit 进行查询,列表查询模式默认查询的条数。
checkSQLschema 参数演示:
说明 1:当 checkSQLschema 为 true 时,我们可以不进入数据库查询,即使用 DB01.TB_ORDER 的方式,但是如果 checkSQLschema 为 false 的时候,就不能这样写了,就必须要要先 usr DB01;今日数据库里面在查找,所以这里大家就直接给 true 就行了。
1.3 schema 标签中的 table 标签
table 标签定义 Mycat 中逻辑库 schema 下的逻辑表,所有需要查分的表都需要在 table 标签中定义。
核心属性
name:定义逻辑表表名,在该逻辑库下唯一
DataNode:定义逻辑表所属的 dataNode,该属性需要与 dataNode 标签中的 name 对应,多个 dataNode 用逗号隔开
rule: 分片规则的名称,分片规则名字是在 rule.xml 中定义的
primaryKey: 逻辑表对应的真是表的主键
type: 逻辑表的类型,目前逻辑表只有全局表和普通表,如果未配置,默认是普通表,全局表配置为 global
1.4 dataNode 标签
dataNode 标签中定义了 Mycat 中的数据节点,也就是我们通常说的数据分片,一个 dataNode 标签就是一个独立的数据分片
核心属性
name:定义了数据节点名称
dataHost:数据库实例主机名称,引用自 dataHost 标签中 name 属性
database:定义分片所属数据库
1.5 dataHost 标签
该标签在 Mycat 逻辑库中作为底层标签,直接定义了具体的数据库实例、读写分离,心跳语句。
核心属性:
name:唯一标识符,供上层标签使用
maxCon/minCon:最大连接数/最小连接数
balance:负载均衡策略,取值 0,1,2,3 ,读写分离的时候,在详细说明这四个取值的意义。
writeType:写操作分发方式(0:写操作转发到第一个 writeHost,第一个挂了,切换到第二个;1:写操作随机发配到配置的 writeHost)
dbDriver:数据库驱动,支持 native 和 jdbc,native 主要支持 MySQL5+,jdbc 主要支持 MySQL8+
1.6 schema.xml 逻辑库映射
逻辑库的名字和 mysql 数据库中的名字可以不一致的,例如我们这里配置的逻辑库的名字是大写的 DB01,而 MySQL 中的数据库名则是小写的 db01,这取决于逻辑库和 MySQL 真实数据库的映射关系。
schema.xml 整体配置流程即关系隐射示意
二、rule.xml
rule.xml 中定义了所有拆分表的规则,在使用过程中可以灵活的使用分片算法,或者对同一个分片算法使用不同的参数,它让分片过程可配置化,主要包含两类标签:tableRule,Function
而在 schema.xml 中配置的分片规则就是在这里定义的
说明 1:在 tableRule 标签里面主要有 columns 和 algorithm 两个标签。
说明 2:columns 标签主要是分表的依据
说明 3:algorithm 标签主要是,分库分表的算法引用,这里 algorithm 里面的值就是 Function 标签的实现。
例如:auto-sharding-long 分表规则的,依据是 rang-long 这个算法。
而 rang-long 这个算法就在 function 标签中有定义,而 function 标签中的 class 就是对应这个算法的实现类。
说明 4:至于这里面的分库分表的规则具体的使用,我们会在后面分库分表实战章节,用到的时候在详细说。
三、server.xml
server.xml 配置文件包含了 Mycat 的系统配置,主要有两个重要的标签:system, user.
3.1 system 标签
重要属性说明:
charset: 取值 utf8: 设置 Mycat 的字符集,字符集需要与 MySQL 的字符集保持一致
nonePasswordLogin: 取值 [0, 1], 0:需要登录密码登录,1:不需要登录密码登录,默认为 0,设置为 1,则需要指定默认账户
useHandshakeV10: 取值 [0,1],使用该选项主要是为了能够兼容高低版本的 jdbc 驱动,是否采用 handshakeV10 来与 client 进行通讯,1:是,0:否
useSqlStat: 取值[0,1],开启 SQL 实时统计 1:开启,0:关闭,开启之后 Mycat 会自动统计 SQL 语句的执行情况:mysql -h xxx.xxx.xxx.xxx -P 9066 -u root -p 之后就可以查看,使用 show @@sql; show @@sql.low; show @@sql.sum 等,分别是查看 Myact 执行的 sql, 执行效率比较低的 SQL,SQL 的整体执行情况,读写比例等等。
useGlobelTableCheak: 取值[0,1],是否开启全局表一致性检查,1:开启,0 关闭
sqlExecuteTimeout: 取值 1000 等整数:SQL 执行的超时时间单位为秒
sequnceHandleType:取值[0,1,2],用来指定 Mycat 全局序列类型,0:本地文件,1:数据库方式,2:为时间戳方式,默认使用本地文件方式,文件方式主要用于测试
sequnceHandlePattern: 正则表达式:必须带有 MYCATSEQ 或者 mycatseq 进入序列匹配流程
subqueryRelationshipCheck: 取值[true,false],子查询存在关联查询的情况下,检查关联字段中是否有分片字段,默认 false
useCompression: 取值[0,1],开启 mysql 压缩协议,0:关闭,1:开始
fakeMySQLVersion: 5.5,5.6,8.0.27 等,设置模拟 MySQL 版本号
defaultSqlParser: 由于 Mycat 的最初版本使用了 FoundationDB 的 SQL 解析器,在 Mycat1.3 后增加了 Druid 解析器,所以要设置 defaultSqlParser 属性来指定默认的解析器,解析器有两个:druidparser 和 fdbparser,在 Mycat1.4 之后默认是 fruidparser,fdbparser 已经废弃
processors: 取值[1,2....] 指定系统可用的线程数量,默认值为 CPU 核心 乘以 每个核心运行的线程数,processors 会影响 processorBufferPool,processorBufferLocalPercent,processorExecutor 属性,所以在性能调优时可以适当的修改 processors 的值
processorBufferChunk: 指定每次分配 Socker Direct Buffer 默认值为 4096 字节,也会影响 BufferPool 长度,如果一次性获取字节过多而导致 buffer 不都用,则会出现警告,可以调大该值
processorExecutor: 指定 NIOProcessor 上共享 businessExecutor 固定线程池的大小,Mycat 把异步任务交给 businessExecutor 线程池,在新版本的 Mycat 中这个连接池使用频率不高,可以适当的把该值调小
packetHeaderSize: 指定 MySQL 协议中的报文头长度,默认 4 个字节。
maxPacketSize: 指定 MySQL 协议可以携带的数据最大大小,默认值为 16M
idleTimeout: 取值 30 等,指定连接的空闲时间的超时长度,如果超时将关闭资源并回收,默认 30 分钟
txlsolation:取值[1,2,3,4], 初始化前端连接的事务隔离级别,默认为 REPEATED_READ,对应数字 3,READ_UNCOMMITED=1, READ_COMMITED=2,REPEATED_READ=3,SERIALIZABLE=4
sqlExecuteTimeout: 取值 300 等, 执行 SQL 的超时时间,如果 SQL 语句执行超时,将关闭连接,默认 300 秒
serverPort: 8066 ,定义 Mycat 的使用端口,默认 8066
managerPort: 9066, 定义 Mycat 的管理端口,默认 9066
3.2 user 标签
说明 1:server.xml 中允许有多个 user,即同时配置多个用户的权限
说明 2:如果一个账户可以访问多个逻辑库,多个逻辑库之间用逗号隔开
说明 3:dml 中的四个二进制数分别代表增,改,查,删的权限
说明 4:如果逻辑表和逻辑库的权限冲突,则就近原则,即优先使用逻辑表的权限
文章转载自:Se7eN_HOU
评论