Mycat关键配置记录

前言

       在生产实际应用过程中,存在一系列的问题。关于使用mycat 的几点使用建议:

1、mycat 是java程序,生产环境需设计虚机集群架构或使用docker 镜像实现集群。如果存在大量全库查询需要申请物理机,独占连接句柄。

 2、mycat 是为了mysql 分库分表而生,对达梦sql语法适应性存风险, 上线前对sql的适配需做好完整的功能验证。

 3、mycat 无法支持复杂sql查询,不能使用大量join等语句。

4、运维阶段,ddl变更表结构,索引等操作必须从mycat发起, 不能连实际库处理。

5、高并发sql语句需要带上分库键,否则会导致全库查询并汇总,性能低甚至拖垮实际库。确实需要全库查询的语句需要控制频率,分页查询不适合查询后几页。


一、schema.xml文件配置

1、<schema>标签

name属性

mycat逻辑库的数据库名称

checkSQLschema属性

校验SQL是否带了schema。默认为false;

当设置为true时,会自动去除SQL语句中的用户名。

eg:

select * from examdb.table1;

执行时会自动去除examdb用户名

--> select * from table1;

 sqlMaxLimit属性

 设置此属性后,若sql未携带limit,则mycat会自动添加limit对应的值

2、<table>标签

name属性

mycat逻辑表名称

dataNode属性

当前逻辑表所属的dataNode名称,可填写多个dataNode(逗号分隔),若填写的dataNode个数过多,可用简写的方式描述。此项可用于分库操作

eg:

<table name="TABLE1" dataNode="testdn$0-99,testdn2$100-199"></table>

rule属性

指定当前逻辑表要使用的规则名称,名称取值于rule.xml配置文件中tableRule标签的name属性。

ruleRequired属性

设置当前逻辑表是否必须指定分片规则,若设置为true,则rule属性必填。

primaryKey属性

 当前逻辑表对应真实表的主键。

特别说明:

若当前逻辑表绑定了非主键分片的规则时,那么使用主键进行查询时,mycat会发送SQL语句至所有配置的dataNode上。如果使用primaryKey属性配置真实表的主键,那么mycat会缓存主键与具体dataNode的信息,再次使用主键进行查询时就不会广播式查询,mycat会发送SQL语句至具体的dataNode上

type属性

当前逻辑表的类型。默认为 普通表;设置仅可填global(全局表)。

autoIncrement属性

当前逻辑表主键自增长开关。默认为 false(禁用);设置为true时,mycat会取当前逻辑表对应的全局序列(存在分片的情况,故取全局序列)进行自增并给值。

 subTables属性

设置当前逻辑表的分表规则,目前分表功能仅mycat1.6版本后支持,且dataNode在分表条件下时只能配置一个,分表条件下不支持各种条件的join语句。

eg:

<table name="TABLE1" subTables="TABLE$1-3,TABLE4"></table>

needAddLimit属性

指定当前逻辑表是否需要自动在每个SQL语句后添加limit限制。默认为true,可设置为false将其关闭。

3、childTable标签 (此标签用于定义E-R分片的子表)

name属性

子逻辑表的名称

joinKey属性

插入子表的时候回使用这个列的值查找父表存储的数据节点

parentKey属性

父逻辑表关联的列名。程序首先获取joinkey的值,再通过parentKey属性指定的列名产生查询语句,通过执行该语句得到父表存储在哪个分片上。从而确定子表存储的位置。

primaryKey属性

 当前逻辑表对应真实表的主键。

needAddLimit属性 

指定当前逻辑表是否需要自动在每个SQL语句后添加limit限制。默认为true,可设置为false将其关闭。

4、<dataNode>标签 

        dataNode标签定义了mycat的数据分片,一个dataNode就是一个独立的数据分片

name属性

数据节点的名称

 dataHost属性

指定当前分片属于哪个数据库实例

 dataBase属性

指定当前分片属于数据库实例的哪个具体库

5、<dataHost>标签

        dataHost标签定义了具体的数据库实例、读写分离配置和心跳语句 

name属性

dataHost标签的名称

maxCon属性

 指定每个读写实例连接池的最大连接数

minCon属性

指定每个读写实例连接池的最小连接,初始化连接池的大小。

balance属性

负载均衡类型,目前的取值有3种:

1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。

2. balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。

3. balance="2",所有读操作都随机的在writeHost、readhost上分发。

4. balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力,注意balance=3只在1.4及其以后版本有,1.3没有。

writeType属性

负载均衡类型,目前的取值有3种:

1. writeType="0", 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .

2. writeType="1",所有写操作都随机的发送到配置的writeHost,1.5以后废弃不推荐。switchType属性

-  -1 表示不自动切换。

-   1 默认值,自动切换。

-   2 基于MySQL主从同步的状态决定是否切换。

dbType属性

指定后端连接的数据库类型,目前支持二进制的mysql协议,还有其他使用JDBC连接的数据库。例如:mongodb、oracle、spark、dm等。

dbDriver 属性

指定连接后端数据库使用的Driver,目前可选的值有nativeJDBC。使用native的话,因为这个值执行的是二进制的mysql协议,所以可以使用mysql和maridb。其他类型的数据库则需要使用JDBC驱动来支持。

从1.6版本开始支持postgresql的native原始协议。

如果使用JDBC的话需要将符合JDBC 4标准的驱动JAR包放到MYCAT\lib目录下,并检查驱动JAR包中包括如下目录结构的文件:META-INF\services\java.sql.Driver。在这个文件内写上具体的Driver类名,例如:com.mysql.jdbc.Driver

 switchType属性

-1 表示不会自动切换

1  默认值,自动切换

2  基于MySQL主从同步的状态决定是否切换

心跳语句为 show slave status

3  基于MySQL galary cluster的切换机制(适合集群)(1.4.1)

心跳语句为 show status like ‘wsrep%’

6、<heartbeat>标签

        heartbeat用于设置心跳语句

7、<writeHost>标签 和 <readHost>标签

host属性

用于标识不同实例,一般writeHost我们使用*M1,readHost我们用*S1。

url属性

数据库实例连接地址,如果是使用native的dbDriver,则一般为address:port这种形式。用JDBC或其他的dbDriver,则需要特殊指定。当使用JDBC时则可以这么写:jdbc:mysql://localhost:3306/

password属性

数据库实例密码

user属性

数据库实例用户

usingDecrypt属性

是否对密码进行加密,mycat1.4.1后支持。默认为0(不加密),1为加密。

加密命令为:

执行mycat jar 程序

java -cp Mycat-server-1.4.1-dev.jar org.opencloudb.util.DecryptUtil 1:host:user:password

Mycat-server-1.4.1-dev.jar 为mycat download 下载目录的jar

1:host:user:password 中 1 为db端加密标志,host为dataHost 的host 名称

二、server.xml文件配置

 1、<user>标签

 name属性

mycat启动后的登录用户名

defaultAccount属性

true/false,是否为默认用户

标签内关键配置展示

<user name="demo" defaultAccount="true">
	  <!-- Mycat启动后的登陆密码 -->
      <property name="password">P@s5w0rd</property>
	  <!-- Mycat启动后的逻辑数据库,可设多个 逗号 分隔  -->
      <property name="schemas">DEMO</property>
	  <!-- Mycat启动后的默认逻辑数据库-->
      <property name="defaultSchema">DEMO</property>
      <!-- 该用户是否只读 true/false-->
      <property name="readOnly">true</property> 
      <!-- 该用户连接服务数量达到此数值,Mycat将降级处理连接该用户的请求,0表示不限制 -->
      <property name="benchmark">9999</property>
      <!-- 是否对密码加密默认0(否),如需要开启配置则设置为1 (是)-->
      <property name="usingDecrypt">0</property>
</user>

如上配置含义:

登录用户demo,且用户仅有只读权限;登录密码P@s5w0rd,且不对密码进行加密处理;可访问的逻辑数据库有DEMO(逻辑库默认为DEMO)。

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值