MySQL運維8-Mycat範圍分表

2023-12-18 18:00:34

一、範圍分片

  根據指定的欄位及其設定的範圍與資料節點的對應情況,來決定該資料屬於哪一個分片。

  

  說明1:範圍分片會提前提供一個分片的範圍預設是0-500萬是一個分片,500萬-1000萬是一個分片,1000萬-1500萬是一個分片,超過1500萬要重新設定。

  說明2:這個範圍我們可以根據自己的需要去自定義使用。

  

  說明3:在設定schema.xml的時候,預設的分片規則 rule="auto-sharding-long" 就是範圍分片規則

  說明4:在rule.xml中有auto-sharding-long的定義,其分片的依據是 id 主鍵

  說明5:在rule.xml中有auto-sharding-long的定義,其採用的演演算法是 rang-long 演演算法

  說明6:在function rang-long中有一個property 屬性,該屬性參照了一個外部檔案 「autopartition-long.txt」 檔案,在這個檔案中就是定義分片的範圍,如果我們要實現自定義資料分片即修改該檔案中的範圍即可。

二、準備資料庫

  

  說明1:在三個資料資料節點上都先建立好需要使用的資料庫range_db

三、設定schema.xml

  

  說明1:新增schema標籤,邏輯庫的名稱為range_db,邏輯表的名稱為tb_range

  說明2:分片規則為 rule="auto-sharding-long" 即範圍分片

  

  說明3:dn7,dn8,dn9對應的資料節點依然是dbhost1,dbhost2,dbhost3.

   

  說明4:dbhost1資料節點為192,168.3.90

  說明5:dbhost2資料節點為192.168.3.91

  說明5:dbhost3資料節點為192.168.3.92

四、server.xml設定

  

  說明1:給root使用者新增range_db的操作許可權

五、範圍分片測試

  首先重啟Mycat

  

  登入Mycat

  

  檢視邏輯庫邏輯表

  

  這裡的tb_range只是邏輯庫,而在MySQL中還並沒有tb_range這個表,需要在Mycat中建立

create table tb_range (id int auto_increment primary key, name varchar(20));

  

  插入一條資料,然後檢視資料節點中對應的資料變化

insert into tb_range (id, name) values (1,'張三');

  

  說明1:id=1的資料插入到了192.168.3.90的資料節點上了,我們採用的是預設的分片範圍

  說明2:繼續新增一個id為5000000的資料看一下是否會繼續插入到192.168.3.90這個資料節點上

insert into tb_range (id, name) values (5000000,'李四');

  

  說明3:沒有問題,id=5000000的也插入到了第一個資料節點上,繼續測試id=5000001的資料

insert into tb_range (id, name) values (5000001,'王五');

  

  說明4:id=5000001的資料,插入到了192.168.3.91第二個資料節點上了,說明5000000是第一個和第二個資料節點的分界線,我們在測試一下id=10000001

insert into tb_range (id, name) values (10000001,'趙六');

  

  說明5:id=10000001的資料插入到了192.168.3.92第三個資料節點上了。繼續測試一下15000001這個id超過了分片範圍,看看是否還能成功?

insert into tb_range (id, name) values (15000001,'侯七');

  

  說明6:這是就報錯了,因為根據分片規則已經找不到15000001應該儲存到那個分片了,如果要繼續新增id的話,就需要在自定義去增加分片範圍了,需要修改 「autopartition-long.txt」這個檔案

  

  修改了組態檔後,我們重新啟動一下Mycat然後再次插入id=15000001資料試試

   

  重新插入id=15000001的資料

insert into tb_range (id, name) values (15000001,'侯七');

  

  

  說明7:修改分片範圍後,id=15000001的資料也可以儲存了。

  總結:如果使用範圍分片的時候,如果預設的分片範圍滿足不了需求,我們只需要修改 "autopartition-long.txt" 這個檔案即可。