上篇文章《MyCat 啓蒙:分佈式系統的數據庫架構演變》中,咱們經過一個項目從零到百萬級訪問的變化,展現了這個過程當中的數據層架構變化。其中說到了數據層架構變化所帶來的三個問題:css
而 MyCat 最初就是爲了解決這個問題而存在的,它能集中管理項目涉及到的全部數據庫鏈接,減小項目中非業務性代碼的編寫。瞭解了 MyCat 的誕生背景,咱們此次就上手用一用這個框架。html
話很少說,咱們先經過一個簡單的例子讓 MyCat 跑起來。mysql
提示:運行 MyCat 服務器須要安裝 JDK 和 MySQL,請確保你的服務器上已經正確安裝。算法
完成環境確認後,到 MyCat 官網下載 MyCat 的服務器包。MyCat 針對不一樣系統提供了不一樣的安裝包,我這邊下載的是 1.6.RELEASE 版本的 Mac 安裝包。sql
下載完成後解壓進入 bin 目錄,運行下面的命令運行 MyCat 服務器:數據庫
查看 MyCat 安裝包目錄下的 logs/wrapper.log
日誌,若是沒有報錯,那就是啓動成功了。服務器
MyCat 安裝包默認爲咱們提供了有讀寫權限的帳號,帳號名爲 root,密碼是 123456。架構
下面咱們直接用這個默認帳號在命令行上鍊接 MyCat。(注意⚠️:app
(我這裏用的是MAMP自帶的mysql)框架
Mini:bin lu$ /Applications/MAMP/Library/bin/mysql -uroot -proot -h127.0.0.1 -P8066
)。
能夠看到咱們已經成功連上了 MyCat 服務器。MyCat 服務器默認定義了一個名爲 TESTDB 的邏輯數據庫,而且也在該邏輯數據庫中定義了一些邏輯表。
但當你嘗試作一些 select 操做的時候,控制檯會提示報錯,這是由於 MyCat 配置錯誤致使的。
若是咱們要使用 MyCat 正確執行 select 語句的話,咱們須要在 MySQL 中先建立三個數據庫,分別是:db一、db二、db3。
建立完成以後再建立 travelrecord 表。
最後在 schema.xml 中保留一個 DataHost 節點:
最後重啓 MyCat 服務器:
以後鏈接 MyCat
鏈接成功後嘗試運行相應的 SQL 語句:
到這裏,咱們已經學會最基本的 MyCat 服務器啓動以及配置了。
打開 MyCat 的目錄,咱們能夠看到 MyCat 主要包括瞭如下幾個文件夾:
其中 bin 目錄是 MyCat 的啓動目錄,conf 目錄是 MyCat 的配置文件目錄,lib 目錄是 MyCat 自身的 Jar 包以及所依賴 Jar 包的目錄,logs 目錄是日誌目錄。
在這 MyCat 的目錄中,最重要的是 conf 目錄,這裏面存放了 MyCat 全部的配置信息。在 conf 目錄中有三個重要的配置文件:schema.xml、server.xml、rule.xml。
schema.xml 文件定義了 MyCat 到底鏈接那個數據庫實例,鏈接這個數據庫實例的哪一個數據庫。MyCat 一共有幾個邏輯數據庫,MyCat 一共有幾個邏輯表。
schema.xml 文件一共有四個配置節點:DataHost、DataNode、Schema、Table。
DataHost 節點定義了 MyCat 要鏈接哪一個 MySQL 實例,鏈接的帳號密碼是多少。默認的 MyCat 爲咱們定義了一個名爲 localhost1 的數據服務器(DataHost),它指向了本地(localhost)3306 端口的 MySQL 服務器,對應 MySQL 服務器的帳號是 root,密碼是 123456。
DataNode 節點指定了須要鏈接的具體數據庫名稱,其使用一個 dataHost 屬性指定該數據庫位於哪一個數據庫實例上。默認的 MyCat 爲咱們建立了三個數據節點(DataNode),dn1 數據節點對應 localhost1 數據服務器上的 db1 數據庫,dn2 數據節點對應 localhost1 數據服務器上的 db2 數據庫,dn1 數據節點對應 localhost1 數據服務器上的 db3 數據庫。
Schema 節點定義了 MyCat 的全部邏輯數據庫,Table 節點定義了 MyCat 的全部邏輯表。默認的 MyCat 爲咱們定義了一個名爲 TESTDB 的邏輯數據庫,在這個邏輯數據庫下又定義了名爲 travaelrecord、company 等 6 個邏輯表。
因此上面當咱們登錄 MyCat 輸入show databases
會看到只有一個名爲 TESTDB 的數據庫,這個就是 MyCat 的邏輯數據庫。
咱們輸入show tables
能夠看到 TESTDB 下對應的邏輯表。
server.xml 定義了項目中鏈接 MyCat 服務器所須要的帳號密碼,以及該帳號能訪問那些邏輯數據庫。 server.xml 配置文件中有 System 和 User 兩個配置節點。
System 節點定義了鏈接 MyCat 服務器的系統配置信息。例如是否開啓實時統計功能,是否開啓全加班一致性檢測等。
User 配置節點定義了鏈接 MyCat 服務器的帳號密碼,以及該帳號密碼所能進行的數據庫操做。默認的 MyCat 爲咱們建立了一個帳戶名爲 root,密碼爲 123456 的帳號,只能訪問 TESTDB 邏輯數據庫,而且定義了對相關表的操做權限。
rule.xml 定義了邏輯表使用哪一個字段進行拆分,使用什麼拆分算法進行拆分。rule.xml 中有兩個配置節點,分別是:TableRule 和 Function 配置節點。
TableRule 配置節點定義了邏輯表的拆分信息,例如使用哪一個字段進行拆分,使用什麼拆分算法。默認的 MyCat 爲咱們配置了一個名爲 rule2 的表拆分規則,表示根據 user_id 字段進行拆分,拆分算法是 func1。
Function 配置節點則定義了具體的拆分算法。例如使用對 1000 取餘的拆分算法,對 100 取餘的拆分算分等等。默認的 MyCat 爲咱們定義了一個名爲 func1 的拆分算法,這個拆分算法定義在 o.mycat.route.function.PartitionByLong 類中,而且還傳入了兩個參數值。