SpringBoot+MyCat 实现读写分离分库分表主从同步
Posted 执笔记忆的空白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot+MyCat 实现读写分离分库分表主从同步相关的知识,希望对你有一定的参考价值。
一、MyCat基本介绍
- 一个用于mysql读写分离和与数据切分的高可用中间件
- 一个模拟为MySQLServer的超级数据库代理
- 一个能平滑扩展支持1000亿大表的分布式数据库系统 (普通单表1kw以下)
- 一个可管控多种关系数据库的数据库路由器
- mycat来自2013年阿里的Cobar的改良版, 截至2015年, 成为大多数公司的数据解决方案
二、基础环境搭建
因为mycat本身对于数据库主从同步还是依赖的其本身机制,所以这里我们使用mysql的时候,也需要配好主从同步,另外需要建好从库的只读账号
注意:如果配了双主同步,那么分库分表就不好做,所以如果想用分库分表,那么双主切记先别做同步。
三、MyCat安装配置
- Mycat版本下载:http://dl.mycat.org.cn/2.0/
- 选择1.6版本,Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
- 上传linux,解压
目录 | 说明 |
---|---|
bin | mycat命令,启动、重启、停止等 |
catlet | catlet为Mycat的一个扩展功能 |
conf | Mycat 配置信息,重点关注 |
lib | Mycat引用的jar包,Mycat是java开发的 |
logs | 日志文件,包括Mycat启动的日志和运行的日志 |
conf配置相关文件如下:
文件 | 说明 |
---|---|
server.xml | Mycat的配置文件,设置账号、参数等 |
schema.xml | Mycat对应的物理数据库和数据库表的配置 |
rule.xml | Mycat分片(分库分表)规则 |
rule.xml配置参考:
<!-- 逻辑数据库名:mycatDatbase,与server.xml中对应;student 是物理数据库中的表,这里在两个库都有这个表 ; dataNode 是自己定义的,区别两个数据库-->
<schema name="CCTV_DB" checkSQLschema="false" sqlMaxLimit="100">
<table name="USERS" primaryKey="id" dataNode="masterNode1,masterNode2" rule="ruleById" autoIncrement="true"/>
</schema>
<!-- 设置dataNode 对应的数据库,name 和schema中对应 ,dataHost:自己定义的host配置 ,database是物理数据库,master1和master2是两个物理数据库 -->
<dataNode name="masterNode1" dataHost="masterHost1" database="CCTV" />
<dataNode name="masterNode2" dataHost="masterHost2" database="CCTV" />
<!-- mycat 逻辑主机dataHost对应的物理主机.其中也设置对应的mysql登陆信息 balance 为1 表示读写分离-->
<dataHost name="masterHost1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<writeHost host="server1" url="192.168.4.38:3306" user="test01" password="test01">
<readHost host="server1" url="192.168.4.40:3306" user="test01" password="test01"/>
</writeHost>
</dataHost>
<dataHost name="masterHost2" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<writeHost host="server1" url="192.168.4.39:3306" user="test02" password="test02">
<readHost host="server1" url="192.168.4.41:3306" user="test02" password="test02"/>
</writeHost>
</dataHost>
- 具体全局操作参考:springboot整合mysql+mycat中间件实现一主两从读写分离和分库分表
- 配置mycat开机自启参考:Mycat设置开机自启
- mycat+mysql自增处理参考:mycat中配合mysql自增主键的使用
- 如果主从同步存在延时问题,则可以某些sql可以强制读主库,mybatis写法如下:
/*#mycat:db_type=master*/ SELECT * FROM tb_item ;
具体参考:mycat配置 Mysql 读写分离+强制走写节点+根据主从延时的读写分离
四、注意事项
上面写的案例是做了双主双从,主从同步,并且双主之间也做了同步,那么如果要做分库分表的话,这里的双主同步就要关掉!
以上是关于SpringBoot+MyCat 实现读写分离分库分表主从同步的主要内容,如果未能解决你的问题,请参考以下文章