最受好评的数据库中间件Mycat的正确下载和配置详细解析
前言
文件下载
Mycat官网:http://www.mycat.org.cn/
建议大家选择 1.6-RELEASE 版本,毕竟是比较稳定的版本.
根据不同的系统选择不同的版本。包括linux、windows、mac,作者考虑还是非常周全的,当然,也有源码版的。(ps:源码版的下载后,只要配置正确,就可以正常运行调试).
配置环境:
|- 最重要的MySql环境,因为MyCat就是服务于MySql数据库.
|- jdk下载(1.7以上) –mycat是基于java开发的,需要java编译环境.
Mycat的安装其实只要解压下载的目录就可以了,非常简单。
文件结构
主要的配置文件都在conf文件夹下
conf-|
server.xml:Mycat的配置文件,设置账号、参数等 -- 对用的用户名和密码进行设置
schema.xml:Mycat对应的物理数据库和数据库表的配置 --- 所有的物理表,物理数据库之间的联系都在这个xml文件下
rule.xml:Mycat分片(分库分表)规则---就是对主从分离的一种规范根据id 或者name
Mycat作为主数据库中间件,肯定是与代码弱关联的,所以代码是不用修改的,使用Mycat后,连接数据库是不变的,默认端口是8066。连接方式和普通数据库一样,如jdbc:mysql://192.168.0.2:8066/
配置解析
1. server.xml
<Schema>
功能:管理着MyCat的逻辑库、表、分片规则,具体属性。
属性:name(定义自己的逻辑数据库,因为要映射到自己的MYCAT之中)。checkSQLschema(布尔值,设置ture的时候我们进行查询:数据库名.表名,这样的方式,MYCAT会自动去掉数据库名)。sqlMaxLimit(设置查询的时候默认返回多少数据,如果在SQL设置了Limit,这个属性不会影响到)。
<Table>
功能:标签定义了MyCat中的逻辑表,所有需要拆分的表都需要在这个标签中定义,如图示。
属性:name(定义逻辑表的表名)
primaryKey(定义逻辑表中的主键)
autoIncrement(布尔值,定义为true时指定这个表增长主键)
dataNode(里面需要去定义dataNode的另外一个配置,这是定位到物理数据库的物理表中,通过逻辑表映射到真正的物理表中,可以写入多个库中的表,可实现分库)
rule(该属性用于指定逻辑表要使用的规则名字,规则名字在 rule.xml 中定义)
<dataNode>
功能:标签定义 MyCat中的数据节点,也就是我们通常所说的数据分片。一个dataNode标签就是一个独立的数据分片,如图示。
属性:name(定义数据节点的名字,这个名字需要是唯一的,我们需要在table标签上应用这个名字,来建立表与分片对应的关系)
dataHost(该属性用于定义该分片属于哪个数据库实例的,属性值是引用dataHost标签上定义的name属性)
database(该属性用于定义该分片属性哪个具体数据库实例上的具体库)
<dataHost>
功能:作为Schema.xml中最后的一个标签,该标签在mycat逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句,如下图
maxCon(指定每个读写实例连接池的最大连接)
minCon(指定每个读写实例连接池的最小连接,初始化连接池的大小)
balance{
负载均衡类型,目前的取值有3 种:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
2. balance="1",全部的readHost与stand bywriteHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
3. balance="2",所有读操作都随机的在writeHost、readhost上分发。
4. balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost 不负担读压力
writeType{
负载均衡类型,目前的取值有 3 种:
1. writeType="0", 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个 writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties.
2. writeType="1",所有写操作都随机的发送到配置的 writeHost
-0 表示不自动切换。
- 1 默认值,自动切换。
- 2 基于 MySQL 主从同步的状态决定是否切换。
dbType(指定后端连接的数据库类型,目前支持二进制的mysql协议,还有其他使用JDBC连接的数据库。例如:mongodb、oracle、spark等)
dbDriver(指定连接后端数据库使用的Driver,目前可选的值有native和JDBC)
switchType(是否设置主从切换,
-1:不切换
1:自动切换
2:基于MySQL主从状态
3:基于集群配置于MySQLgalary cluster切换机制)
<heartbeat>这个标签内指明用于和后端数据库进行心跳检查的语句,用于初始化SQL语句
3. rule.xml
rule.xml里面就定义了我们对表进行拆分所涉及到的规则定义。
这个文件里面主要有 tableRule 和 function 这两个标签。在具体使用过程中可以按照需求添加tableRule 和 function.
简单来说就是在function标签下定义好分表分片规则,然后应用到tableRule标签中,最后映射到schema.xml,function标签如下图
Function标签:
|--- name 指定算法的名字。
|--- class 制定路由算法具体的类名字。
|--- property 为具体算法需要用到的一些属性。
tableRule标签设置如下图
tableRunle标签:
|--- name 属性指定唯一的名字,用于标识不同的表规则。
|--- rule 标签则指定对物理表中的哪一列进行拆分和使用什么路由算法
|--- columns 指定要拆分的列名字。
|--- algorithm 使用 function 标签中的 name 属性。连接表规则和具体路由算法。多个表规则可以连接到同一个路由算法上。table 标签内使用。让逻辑表使用这个规则进行分片。
"你可以到mycat官网上面获取《Mycat权威指南》
也可以到mycat github上面获取代码以及相关文档。
小普持续推出有价值的文章,关注“普适极客”👇
♥一起在技术研发的最前沿共同成长!♥