MyCat使用Mysql的通訊協議模擬成一個MySQl服務器,並建立了完整的Schema(數據庫)、Table(數據表)、User(用戶)的邏輯模型,並將這套邏輯模型映射到后端的存儲節點DataNode上的真實的物理庫中,這樣一來所有能使用MySQL的客戶端及編程語言都能將Mycat當成MYSQLServer使用,不必開發新的客戶端。
Mycat的原理:當Mycat收到一個客戶端發送的SQL請求,會先對SQL進行語法分析和檢查,分析的結果用SQL路由,SQL路由策略支持傳統的基於表格的分片字段進行分片,也支持獨有的基於數據庫E-R關系的分別片策略,對於路由到多個數據節點(DataNode)的SQL,則會對收到的數據集進行”歸並“,然后輸出到客戶端。
DataNode是MyCat的邏輯數據節點,映射到后端的某一個物理數據庫的一個Datebase,為了做到系統高可用,每個DataNode可以配置多個引用地址(DataSource),當主DataSource被檢測為不可用時,系統會自動切換到下一個可用的DataSource上,這里的DataSoure即可認為是Mysql的主流服務器的地址。
1、下載安裝包 https://github.com/MyCATApache/Mycat-download/tree/master/1.5-RELEASE
2、配置環境變量(Mycat安裝包解壓在任何路勁即可,但是要避免中文路徑,因為我們要配置環境變量)
3、修改配置文件(需要修改的配置文件都在conf文件夾中)
(1)修改wrapper.conf
配置jdk
(2)修改server.xml(定義用戶以及系統相關變量,如端口等,是mycat服務器參數調整和用戶授權的配置文件)
配置mycat登錄的用戶名和密碼
(3)修改schema.xml (定義邏輯庫,表、分片節點等內容)
配置的一個全局表T_RANK,一個分庫表T_USER_LABEL,分庫規則是sharding-by-murmur(在rule.xml中定義)
配置了三個數據庫db1,db2,db3
(4)修改rule.xml
在上面schema.xml文件中定義了一個分庫表T_USER_LABEL,分庫規則是sharding-by-murmur,所以要修改對應分庫字段
同時上面定義了三個分庫,所以修改
注:簡單介紹一下Mycat分庫規則
MYCAT常用的分片規則如下,另外還有一些其他分片方式這里不全部列舉:
(1)分片枚舉: sharding-by-intfile
(2)主鍵范圍約定: auto-sharding-long 此分片適用於,提前規划好分片字段某個范圍屬於哪個分片
(3)一致性hash: sharding-by-murmur
(4)字符串hash解析: sharding-by-stringhash
(5)按日期(天)分片:sharding-by-date
(6)按單月小時拆分: sharding-by-hour
(7)自然月分片: sharding-by-month
(8)取模: mod-long 此規則為對分片字段求摸運算
(9)取模范圍約束: sharding-by-pattern 此種規則是取模運算與范圍約束的結合,主要為了后續數據遷移做准備,即可以自主決定取模后數據的節點分布
4、啟動mycat
(1)在原數據庫中新建3個數據庫db1,db2,db3
(2)啟動和停止服務
進入cmd.切換到./mycat/bin/
注:安裝mycat服務 :mycate install
啟動mycat服務 :mycate start
停止mycat服務 :mycate stop
注意:當修改配置文件后,需要重啟mycat服務
mysql -h[IP] - u[userName] -p[password] -P8066
在8066查看數據庫,使用數據庫添加表
新建表
使用navicat客戶端連接 端口是8066 用戶名和密碼是在上面server.xml中配置的
(注意這里我犯了一個低級錯誤,連接名使用了冒號,由於這里的連接名會在生成一個相應的文件夾,所以這里的命名需要滿足windows文件名規范)
至此,mycat配置完成,可以嘗試輸入insert語句,查看數據滿足分庫和全局表。。。。。。