欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MyCat教程五:实现分库分表

程序员文章站 2022-07-09 21:10:53
本文我们来介绍下MyCat的分库分表操作 分库分表 一、分片规则介绍 在rule.xml中定义了各种myCat支持的分片规则。 取模mod long 自然月分片 sharding by month 按日期(天)分片sharding by date 按单月小时拆分sharding by hour 范围 ......


 本文我们来介绍下mycat的分库分表操作


分库分表


一、分片规则介绍


  在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.1 创建3个数据库


  在master中分别创建3个数据库demo1,demo2,demo3,因为主从的关系会同步到从库中。


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

MyCat教程五:实现分库分表


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中的配置


MyCat教程五:实现分库分表

同时我们需要删除掉ruledata目录中的规则文件,不然修改的3不会起作用


MyCat教程五:实现分库分表


重启mycat服务


MyCat教程五:实现分库分表


查看分配规则


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;

MyCat教程五:实现分库分表

三、分库测试

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

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

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

MyCat教程五:实现分库分表

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

然后我们来看下查询操作,通过mycat看能否将所有的数据都查询出来,

MyCat教程五:实现分库分表