【Mycat】作為Mycat核心開發者,怎能不來一波Mycat系列文章?
阿新 • • 發佈:2020-11-11
## 寫在前面
> 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中的邏輯庫、邏輯表,和分片的相關資訊。配置如下:
`