MyCat教程五:实现分库分表


  本文咱们来介绍下MyCat的分库分表操做mysql

分库分表

1、分片规则介绍

  在rule.xml中定义了各类myCat支持的分片规则。程序员

  1. 取模mod-long
  2. 天然月分片 sharding-by-month
  3. 按日期(天)分片sharding-by-date
  4. 按单月小时拆分sharding-by-hour
  5. 范围约定,提早规划好分片字段某个范围属于哪一个分片,auto-sharding-long
  6. 范围求模分片
  7. 取模范围约束sharding-by-pattern
  8. 分片枚举sharding-by-intfile
  9. 固定分片hash算法
  10. 截取数字hash解析sharding-by-stringhash
  11. 一致性hash
  12. 日期范围hash分片rangeDateHash
  13. 截取数字作hash求模范围约束sharding-by-prefixpattern
  14. 应用指定,在运行阶段有应用自主决定路由到那个分片。sharding-by-substring
  15. 冷热数据分片 sharding-by-date
  16. 有状态分片算法
  17. crc32slot分片算法

注意:算法

  1. id中推荐配置主键列
  2. 全部的 tableRule 只能使用一次。若是须要为多个表配置相同的分片规则,那么须要在此从新定义该规则。
  3. 在 crc32Slot 算法中的分片数量一旦给定,MyCat 会将该分片数量和 slor 的取值范围保存到文件中。在次修改分片数量时是不会生效的,须要将该文件删除。文件位置位于 conf目录中的 ruledata 目录中。

2、分库配置

2.1 建立3个数据库

  在master中分别建立3个数据库demo1,demo2,demo3,由于主从的关系会同步到从库中。sql

create database demo1 default character set utf8;
create database demo2 default character set utf8;
create database demo3 default character set utf8;

  
  
  

 
复制代码

在这里插入图片描述

2.2 schema.xml配置

  修改schema.xml文件中的信息,以下:数据库

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
		<table name="t_user" dataNode="dn1,dn2,dn3" rule="crc32slot" />
	</schema>
	<dataNode name="dn1" dataHost="localhost1" database="demo1" />
	<dataNode name="dn2" dataHost="localhost1" database="demo2" />
	<dataNode name="dn3" dataHost="localhost1" database="demo3" />
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="hostM1" url="192.168.88.180:3306" user="root" password="123456">
			<!-- can have multi read hosts -->
			<readHost host="hostS2" url="192.168.88.181:3306" user="root" password="123456" />
		</writeHost>
	</dataHost>
</mycat:schema>

  
  
  

 
复制代码

注意:后端

  1. 由于有三个库,因此添加了三个dataNode
  2. 使用的分配规则是crc32slot
  3. 主从和读写分离设置没有动,因此writeHostreadHost的配置没变

2.3 修改rule.xml文件

  由于使用的是crc32slot算法,且有3个数据库,因此须要修改rule.xml中的配置微信

在这里插入图片描述
同时咱们须要删除掉ruledata目录中的规则文件,否则修改的3不会起做用前后端分离

在这里插入图片描述

重启mycat服务微服务

在这里插入图片描述

查看分配规则测试

在这里插入图片描述

2.3 在mycat中建立t_user表

  先删除原来建立的t_user表,而后经过mycat建立t_user表示,经过mycat建立会多出来一个_slot字段。

CREATE TABLE t_user (
	`id` INT,
	`name` VARCHAR (30),
	`age` INT,
	PRIMARY KEY (`id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8;

  
  
  

 
复制代码

在这里插入图片描述

3、分库测试

  在mycat客户端插入数据,而后去对应的物理库中查询具体的状况

insert into t_user(id,name,age)values(1,'HG-93',14)

  
  
  

 
复制代码

注意:插入语句的语法要完整,不要偷懒省略字段,尤为是id自增加!!!

在这里插入图片描述

数据按照咱们设置的规则分别存储到了各自数据的表结构中了。

而后咱们来看下查询操做,经过mycat看可否将全部的数据都查询出来,

在这里插入图片描述



关注微信公众号【程序员的梦想】,专一于Java,SpringBoot,SpringCloud,微服务,Docker以及先后端分离等全栈技术。

在这里插入图片描述
相关文章
相关标签/搜索