1. 程式人生 > >【Mycat】作為Mycat核心開發者,怎能不來一波Mycat系列文章?

【Mycat】作為Mycat核心開發者,怎能不來一波Mycat系列文章?

## 寫在前面 > Mycat是基於阿里開源的Cobar產品而研發,Cobar的穩定性、可靠性、優秀的架構和效能以及眾多成熟的使用案例使得Mycat一開始就擁有一個很好的起點,站在巨人的肩膀上,我們能看到更遠。業界優秀的開源專案和創新思路被廣泛融入到Mycat的基因中,使得Mycat在很多方面都領先於目前其他一些同類的開源專案,甚至超越某些商業產品。——來自Mycat官網。 > > 作為Mycat的核心開發者,怎能不來一波Mycat系列文章呢? ## 背景介紹 作為Mycat的核心開發者之一,今天,終於安排到Mycat系列文章了。在Mycat系列文章中,我們一起從一個利用Mycat實現分庫分表的案例作為入門程式。後續會持續更新Mycat原理、架構和底層原始碼解析的文章。希望Mycat系列文章能夠幫助小夥伴們徹底掌握Mycat。 那麼,今天,我們就先來一波使用Mycat實現MySQL分庫分表的文章。 注:案例中的MySQL伺服器是安裝在CentOS6.8伺服器上,Mycat Server是安裝在本機的Windows系統上,安裝在什麼環境上無所謂,這裡,我用的是VMWare虛擬機器,安裝的CentOS系統,開啟多個虛擬機器,電腦實在是吃力,所以將Mycat Server裝在了本機的Windows系統上。 ## 方案規劃 | IP | 埠 | 服務 | 使用者名稱 | 密碼 | | -------------- | --------- | ------------ | ------ | -------- | | 192.168.81.131 | 3306 | MySQL資料庫 | root | root | | 192.168.81.132 | 3306 | MySQL資料庫 | root | root | | 192.168.81.133 | 3306 | MySQL資料庫 | root | root | | 192.168.81.130 | 8066/9066 | Mycat Server | admin | admin123 | 如上表所示,在區域網的4臺主機中,131——133的主機各安裝有一臺MySQL例項,130主機,也就是本機安裝了Mycat Server。 現在假設系統的資料庫為messagedb,裡面只有2張表,一張表為訊息表:message,一張表示訊息來源的字典表:source,本案例實現的是按自然月分片的規則,因此上述3個mysql例項各自需要建立4個數據庫,即 | 資料庫例項 | 儲存的資料庫 | | ------------------- | ---------------------------------------------------------- | | 192.168.81.131:3306 | message202001、message202002、message202003、message202004 | | 192.168.81.132:3306 | message202005、message202006、message202007、message202008 | | 192.168.81.133:3306 | message202009、message202010、message202011、message202012 | 說明:如果是剛接觸Mycat的小夥伴對分片不太理解,簡單地說,對於Mycat,一個分片表示某一個MySQL例項上的某一個數據庫,即schema@host,於是當我們原先的一張大表需要分片的時候,mycat就會按照我們設定的規則,把這張大表中的資料分散到各個分片上,即所謂的分表分庫,因此我們需要在每個對應的分片上建立相同名稱的資料庫,相同結構的表。 ## 環境準備 注意:這裡,我就省略了MySQL的安裝過程,小夥伴們可自行安裝MySQL。我後續也會在MySQL相關的專題中給大家分享企業級MySQL安裝、優化與部署過程。 ### 建立資料庫並建表匯入資料 根據資料庫例項和儲存的資料庫對應關係表建立所有的資料庫,並在每個資料庫裡執行如下指令碼: ```sql create table source ( id int(11) not null auto_increment primary key comment 'pk', name varchar(10) default '' comment 'source name' ); create table message ( id int(11) not null auto_increment primary key comment 'pk', content varchar(255) default '' comment 'message content', create_time date default null, source_id int(11) not null, foreign key(source_id) references source(id) ); insert into `source`(`id`,`name`) values(1,'weibo'); insert into `source`(`id`,`name`) values(2,'weixin'); insert into `source`(`id`,`name`) values(3,'qq'); insert into `source`(`id`,`name`) values(4,'email'); insert into `source`(`id`,`name`) values(5,'sms'); ``` 在message表中,總共有4個欄位: * id:主鍵 * content:訊息的內容 * create_time:建立時間,這也是mycat進行分片時的參考欄位 * source_id:source表的外來鍵 另外,我們在source表插入了5條記錄,用於測試。到這裡,後端資料庫的環境就搭建完成了。 ## 安裝和配置Mycat ### 安裝Mycat 安裝Mycat的過程比較簡單,在這個地址就可以下載安裝包:[https://github.com/MyCATApache/Mycat-download/tree/master/1.6-RELEASE](https://github.com/MyCATApache/Mycat-download/tree/master/1.6-RELEASE)。下載完之後,就進行解壓到系統相應目錄,這裡就不細說了。 ### Mycat安裝包結構 安裝完之後,簡單地看一下mycat目錄結構: ![](https://img-blog.csdnimg.cn/2020111000313468.jpg) ### 啟動Mycat WIndows下啟動需要以管理員身份開啟命令列視窗,cd 到Mycat的bin目錄下,或者將Mycat的 安裝目錄加入系統的環境變數path目錄裡,首先輸入命令mycat install進行mycat服務的安裝操作,然後 輸入命令mycat start 啟動Mycat Server。 Linux下進入Mycat的bin目錄直接輸入./mycat start 啟動Mycat Server。 Mycat提供了兩個埠,其中,9066埠是管理埠,提供檢視當前系統節點的情況,報告心跳狀態等相關係統監控的功能,8066是資料埠,相當於資料庫的訪問埠。我們可以使用mysql命令訪問這裡兩個埠 ```sql mysql -h[mycat_host] -u[mycat_user] -p[mycat_passwd] -P [8066|9066] ``` 同時,我們也可以修改這兩個埠。 那麼mycat_user和mycat_passwd是如何配置呢,下面就需要介紹mycat中最主要的3個配置檔案:server.xml,schema.xml和rule.xml。 ### server.xml 該配置檔案是用於配置mycat的系統資訊,主要有兩個標籤:system和user。這裡的user就是上述訪問mycat服務的使用者,不是後端資料庫的使用者。如果我們使用預設的配置,server.xml大概是這樣的: ```xml ``` user標籤下schemas屬性表示該使用者可以訪問的資料庫,可以定義多個數據庫,用英文逗號隔開。schemas定義的資料庫,一定要配置在後面的schema.xml檔案對應的邏輯庫,否則會提示無法訪問。 ### schema.xml schema配置檔案比較複雜,也是最關鍵的一個配置檔案,定義了mycat中的邏輯庫、邏輯表,和分片的相關資訊。配置如下: `