[toc]
## 概述
Mycat的架構其實很好理解,Mycat是代理,Mycat后面就是物理數據庫。和Web服務器的Nginx類似。對于使用者來說,訪問的都是Mycat,不會接觸到后端的數據庫。
我們現在做一個主從、讀寫分離,簡單分表的示例。結構如下圖:

| 服務器 | IP | 說明 |
| --- | --- | --- |
| Mycat | 192.168.0.2 | mycat服務器,連接數據庫時,連接此服務器 |
| database1 | 192.168.0.3 | 物理數據庫1,真正存儲數據的數據庫 |
| database2 | 192.168.0.4 | 物理數據庫2,真正存儲數據的數據庫 |
Mycat作為主數據庫中間件,肯定是與代碼弱關聯的,所以代碼是不用修改的,使用Mycat后,連接數據庫是不變的,默認端口是8066。連接方式和普通數據庫一樣,如:jdbc:mysql://192.168.0.2:8066/
## 安裝
[官網](http://www.mycat.io/)下載最新的release版本。源碼是已經編譯過的,可以直接使用。
~~~
wget http://dl.mycat.io/1.6.7.1/Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz
# 注意C是大寫
tar zxvf ./Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz -C /usr/local/
cd /usr/local/mycat
~~~
安裝完成后,目錄如下:
| 目錄 | 說明 |
| --- | --- |
| bin | mycat命令,啟動、重啟、停止等 |
| catlet | catlet為Mycat的一個擴展功能 |
| conf | Mycat 配置信息,重點關注 |
| lib | Mycat引用的jar包,Mycat是java開發的 |
| logs | 日志文件,包括Mycat啟動的日志和運行的日志。 |
## 制作docker鏡像
~~~
FROM java:8-jre
MAINTAINER by caiwen (xiaogang.zhou@qq.com)
LABEL Description="使用mycat做mysql數據庫的讀寫分離"
ENV mycat-version Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz
USER root
COPY ./Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz /
RUN tar -zxf /Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz
ENV MYCAT_HOME=/mycat
ENV PATH=$PATH:$MYCAT_HOME/bin
WORKDIR $MYCAT_HOME/bin
RUN chmod u+x ./mycat
EXPOSE 8066 9066
CMD ["./mycat","console"]
~~~
**創建運行**
```
docker build -t mycat:v1 .
docker run --name mycat -p 8066:8066 -p 9066:9066 -itd mycat:v1
```
**docker-compose**
## 參考資料
* [mycat官網](http://www.mycat.io/)
* [mycat的在線手冊](https://github.com/MyCATApache/Mycat-Server/wiki/1-Mycat%E5%AF%BC%E5%BC%95)
* [Mycat導引](https://github.com/MyCATApache/Mycat-Server/wiki/1-Mycat%E5%AF%BC%E5%BC%95)
* [學會數據庫讀寫分離、分表分庫——用Mycat,這一篇就夠了!](https://www.cnblogs.com/joylee/p/7513038.html)
* [Docker制作數據庫中間件Mycat源碼鏡像](https://blog.csdn.net/boonya/article/details/77700864)
*
- 【mysql的編程專題①】流程控制與其他語法
- 【mysql的編程專題②】觸發器
- 【mysql的編程專題③】內置函數
- 【mysql的編程專題④】存儲過程
- 【mysql的編程專題⑤】自定義函數
- 【mysql的編程專題⑥】視圖
- 【mysql的設計與優化專題(1)】ER圖,數據建模與數據字典
- 【mysql的設計與優化專題(2)】數據中設計中的范式與反范式
- 【mysql的設計與優化專題(3)】字段類型與合理的選擇字段類型
- 【mysql的設計與優化專題(4)】表的垂直拆分和水平拆分
- 【mysql的設計與優化專題(5)】慢查詢詳解
- 【mysql的設計與優化專題(6)】mysql索引攻略
- 【Mysql問題集錦(1)】mysql不能使用innodb存儲引擎
- 【Mysql進階技巧(2)】利用mysql生成唯一序號
- 【Mysql進階技巧(1)】MySQL的多表關聯與自連接
- 【Mysql高可用架構(1)】基于日志點的主從復制
- 【Mysql高可用架構(2)】主從管理的系統視圖
- 【Mysql高可用架構(3)】基于GTID的主從復制
- 【Mysql高可用架構(4)】在線變更復制類型
- 【Mysql高可用架構(5)】多源復制(多主一從)
- 【Mysql高可用架構(6)】多線程復制
- 【Mysql高可用架構(7)】在線設置復制過濾
- 【Mysql高可用架構(8)】解決主從不一致
- 【Mysql高可用架構(9)】初識mycat以及制作mycat鏡像
- 【Mysql高可用架構(10)】mycat配置mysql讀寫分離
- MyCat 集群部署(HAProxy + MyCat)
- 常用復雜sql語句整理