Mycat

Posted 成为DBA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mycat相关的知识,希望对你有一定的参考价值。

Mycat简介

Mycat是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。MyCat 是目前最流行的基于 java 语言编写的数据库中间件,是一个实现了 mysql 协议的服务器,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL原生协议(native)与多个MySQL 服务器通信,也可以用 JDBCJdbc:是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。)协议与大多数主流数据库服务器通信。例如OracleSqlServer等等

Mycat开源免费,随环境变化更新维护快。Mycat支持标准的sql语句,大大降低学习成本。MyCat就是实现数据库集群的,对海量数据存储的一种解决方案,因为很多数据库不想Oracle一样自带集群的配置,那么在进行海量数据存储的时候就要使用到MyCat进行数据库的管理了。Mycat适合1000亿条以下的单表规模。

Mycat作用

基本功能实现数据库的高可用读写分离,数据库的分库分表,容灾备份等等。适用于并发量大,单机已经不能处理并发请求,、以及读远大于写的场景,数据实时要求不那么严格的场景。

Mycat原理

Mycat原理就是拦截用户发来的请求(SQL语句),mycatSQL语句进行分析,如对SQL语句进行读写分离分析、分片分析、路由分析等等,然后将分析结果发送到后端的真是数据库上,数据库返回结果,mycat再将结果返回非用户。

Mycat配置文件说明

Mycat配置文件主要为三个,分别为server.xmlschema.xmlrule.xml

Server.xml用于配置mycat的账号密码以及逻辑库标签等

<!DOCTYPEmycat:server SYSTEM "server.dtd">

<mycat:serverxmlns:mycat="http://org.opencloudb/">

    <system>

        <propertyname="defaultSqlParser">druidparser</property>

    </system>

    <user name="user">  #设置mycat的用户名

        <propertyname="password">user</property>  #设置mycat的用户密码

        <propertyname="schemas">e3mall</property>  #设置逻辑库名称

        <propertyname="readOnly">false</property> 

    </user>

</mycat:server>

 

Schema.xml该文件是MyCat中最重要的配置文件之一,管理着MyCat的逻辑库、表、分片规则。

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://io.mycat/">

 

//1.配置逻辑库的标签

<schema name="TESTDB" checkSQLschema="false"sqlMaxLimit="100">

<table name="t_user" dataNode="dn1,dn2,dn3"rule="crc32slot" />

</schema>

 

//2.配置数据节点的标签

<dataNode name="dn1" dataHost="localhost1"database="db1" />

<dataNode name="dn2" dataHost="localhost1"database="db2" />

<dataNode name="dn3" dataHost="localhost1"database="db3" />

//3.配置连接的主机的节点标签

<dataHost name="localhost1" maxCon="1000"minCon="10" balance="0"

writeType="0" dbType="mysql"dbDriver="native"

switchType="1" slaveThreshold="100">

 

//4.配置读写分离

<heartbeat>select user()</heartbeat>

<writeHost host="hostM1" url="localhost:3306"user="root" password="root">

<readHost host="hostS2"url="192.168.1.200:3306" user="root"password="root" />

</writeHost>

</dataHost>

</mycat:schema>

 

Balance:读请求的负载均衡

0:不开启读写分离,所有读操作都发送到writhost中;

1:全部的readhostwritehost都参与读操作的负载均衡;

2:读请求随机发送给readhostwritehost

3:读请求随机发送给writehost中的readhostwritehost不参与读请求(推荐使用)

 

Writetype:写请求负载均衡

0:写请求先发送给schema.xml中的第一个writehost,当第一个writehost挂掉,再自动切换到writehost中,切换的第二个writehost中。重新启动后,以切换后的为准,切换记录会被记录在conf/dnindex.properties

1:写请求随机发送到所有的wirtehost中;

2:不执行写操作。

Switchtype指切换的模式

0:不自动切换;

1:自动切换;

2:基于mysql主从同步的状态,决定是否切换 心跳语句为show slave status

3:基于mysql galary cluster的切换机制,心跳语句为show status like ‘wsrep%’

 

Rule.xml:定义了分片的规则,这一部分为tableRulefunction这两个标签。

<tableRule name="auto-sharding-long">

    <rule>

        <columns>id</columns>

       <algorithm>rang-long</algorithm>

    </rule>

</tableRule>

name:用户标识不同的分表规则;

columns:指定按哪一列进行拆分;

algorithm:该属性值为下面function标签中name的属性值,定义了连接表规则的具体的路由算法,多个表规则可以连接到同一个路由算法上;

例如:

<functionname="rang-long" class="org.opencloudb.route.function.AutoPartitionByLong">

   <propertyname="mapFile">autopartition-long.txt</property>

</function>


以上是关于Mycat的主要内容,如果未能解决你的问题,请参考以下文章

MyCAT简单入门配置

mycat

MyCat

MyCat学习

MySQL系列教程

Mycat配置说明