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以及先後端分離等全棧技術。

在這裏插入圖片描述
相關文章
相關標籤/搜索