MyCat教程五:實現分庫分表



 本文我們來介紹下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;

  
  
  
          

在這里插入圖片描述

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 
           ; 
          

在這里插入圖片描述

三、分庫測試

  在mycat客戶端插入數據,然后去對應的物理庫中查詢具體的情況

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

  
  
  
          

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

在這里插入圖片描述

數據按照我們設置的規則分別存儲到了各自數據的表結構中了。

然后我們來看下查詢操作,通過mycat看能否將所有的數據都查詢出來,

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM