Mycat 是SQL集群中间件,基于阿里开源的Cobar产品而研发,继承了Cobar的稳定性、可靠性、优秀的架构和性能
首先在安装Mycat之前,需要安装JDK1.7以上,可以在cmd环境下输入 java -version 查看本地安装的java版本
安装JDK后,还需要安装Mysql(因为我本地环境安装的是Mysql,所以用Mysql做测试)
1.下载Mycat
链接: https://pan.baidu.com/s/1L9TK3Vo2PTxS2WKdvjL4CQ 提取码: rrrp
2.解压
下载成功后,解压到本地,目录结构如下:
3.配置
server.xml | Mycat的配置文件,设置账号、参数等 |
schema.xml | Mycat对应的物理数据库和数据库表的配置 |
rule.xml | Mycat分片(分库分表)规则 |
.server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="defaultSqlParser">druidparser</property>
<property name="mutiNodeLimitType">1</property>
<property name="serverPort">8066</property>
<property name="managerPort">9066</property>
</system>
<!-- mycat 的用户名,密码,数据库 -->
<user name="test">
<property name="password">123456</property>
<property name="schemas">JGDB</property>
</user>
<user name="user">
<property name="password">123456</property>
<property name="schemas">JGDB</property>
<property name="readOnly">true</property>
</user>
</mycat:server>
.rule.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License. - You
may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
- - Unless required by applicable law or agreed to in writing, software -
distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
License for the specific language governing permissions and - limitations
under the License. -->
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="order_rule">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">2</property>
</function>
</mycat:rule>
.schema.xml
schema 是第一个,与server.xml配置的名称相对应
table 里表明student 表,主键是id,有两个dataNode节点,这两个节点是用来水平分片的,规则就是rule定义的ruleById.
dataNode节点标明物理数据库和物理主机
dataHost 设置具体的数据库
balance属性
balance=”0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上
balance=”1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡
balance=”2”,所有读操作都随机的在 writeHost、 readhost 上分发。
balance=”3”, 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力
writeType 设置 写入方式的,负载均衡方式可以设置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 设置表的存储方式.schema name="JGDB" 与 server.xml中的 JGDB 设置一致 -->
<schema name="JGDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="users" primaryKey="id" dataNode="db1" />
<table name="orders" primaryKey="id" dataNode="db2,db3" rule="order_rule" />
</schema>
<!-- 设置dataNode 对应的数据库,及 mycat 连接的地址dataHost -->
<dataNode name="db1" dataHost="host1" database="db1" />
<dataNode name="db2" dataHost="host1" database="db2" />
<dataNode name="db3" dataHost="host1" database="db3" />
<!-- mycat 逻辑主机dataHost对应的物理主机.其中也设置对应的mysql登陆信息 -->
<dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat></heartbeat>
<writeHost host="server1" url="localhost:3306" user="root" password="123456"/>
</dataHost>
</mycat:schema>
4.启动
5.测试
5.1使用 navicat连接 mycat
现在去点击着两张表会报错,因为我们本地服务没有创建数据库和对应的表,根据schema.xml去建数据库和表
5.2创建本地服务的数据库和表
5.3查看数据
本地服务的db1的users里的数据和mychat服务里的userss数据一样
mychat服务里的orders数据来自本地服务的db2,db3两个数据库中的orders表
6.springboot 代码
1.properties文件
只有这一个配置,其他的就和我们平时使用的没什么区别了
server.port=@service.port@
swagger.show=@swagger.show@
mybatis.mapperLocations=classpath:mybatis/*.xml
##设置全局的日志级别,如果没有设置,以log4j2.xml配置的root 的level 为准
logging.level.root=info
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=xudong
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:8066/mycatDatabase
来源:CSDN
作者:zchichu
链接:https://blog.csdn.net/zchichu/article/details/104165265