SpringBoot+MyCat 实现读写分离分库分表主从同步

Posted 执笔记忆的空白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot+MyCat 实现读写分离分库分表主从同步相关的知识,希望对你有一定的参考价值。

 

一、MyCat基本介绍

  • 一个用于mysql读写分离和与数据切分的高可用中间件
  • 一个模拟为MySQLServer的超级数据库代理
  • 一个能平滑扩展支持1000亿大表的分布式数据库系统 (普通单表1kw以下)
  • 一个可管控多种关系数据库的数据库路由器
  • mycat来自2013年阿里的Cobar的改良版, 截至2015年, 成为大多数公司的数据解决方案

二、基础环境搭建

因为mycat本身对于数据库主从同步还是依赖的其本身机制,所以这里我们使用mysql的时候,也需要配好主从同步,另外需要建好从库的只读账号

参考:MySQL一主一从,双主双从,主从同步配置

注意:如果配了双主同步,那么分库分表就不好做,所以如果想用分库分表,那么双主切记先别做同步。

三、MyCat安装配置

  1. Mycat版本下载:http://dl.mycat.org.cn/2.0/
  2. 选择1.6版本,Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
  3. 上传linux,解压
目录说明
binmycat命令,启动、重启、停止等
catletcatlet为Mycat的一个扩展功能
confMycat 配置信息,重点关注
libMycat引用的jar包,Mycat是java开发的
logs日志文件,包括Mycat启动的日志和运行的日志

 

 

 

 

 

 

conf配置相关文件如下: 

文件说明
server.xmlMycat的配置文件,设置账号、参数等
schema.xmlMycat对应的物理数据库和数据库表的配置
rule.xmlMycat分片(分库分表)规则

 

 

 

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>	
  1. 具体全局操作参考:springboot整合mysql+mycat中间件实现一主两从读写分离和分库分表
  2. 配置mycat开机自启参考:Mycat设置开机自启
  3. mycat+mysql自增处理参考:mycat中配合mysql自增主键的使用
  4. 如果主从同步存在延时问题,则可以某些sql可以强制读主库,mybatis写法如下:
/*#mycat:db_type=master*/ SELECT * FROM tb_item ;

    具体参考:mycat配置 Mysql 读写分离+强制走写节点+根据主从延时的读写分离

四、注意事项

   上面写的案例是做了双主双从,主从同步,并且双主之间也做了同步,那么如果要做分库分表的话,这里的双主同步就要关掉!

 

 

 

 

 

 

 

 

 

 

 

以上是关于SpringBoot+MyCat 实现读写分离分库分表主从同步的主要内容,如果未能解决你的问题,请参考以下文章

MyCat实现读写分离+分库分表+全局表

docker安装mycat并实现mysql读写分离和分库分表

Mycat 读写分离+分库分表

Mycat简单实现读写分离与分库分表

用Mycat实现数据库读写分离分表分库

真实案例:用MyCat实现数据库读写分离与分库分表