一、mycat概述
mycat是阿里巴巴企業下的開源的,基於JAVA語言編寫的MySQL資料庫中介軟體,可以像使用MySQL一樣來使用Mycat,對於開發人員來說根本感覺不到mycat的存在。之前在國內使用資料庫分庫分表,讀寫分離最主流的就是使用mycat,但是截止到今日2023-12-13日,mycat的網站的下載連結已經不能開啟了,不知道是伺服器暫時出問題,還是沒有人維護了,以後都不在支援更新下載了,但是作為曾經的主流中介軟體,我個人覺得還是有必要學習一下。我之前保留了Mycat1.6的linux版本現在分享給大家
mycat1.6: 連結: https://pan.baidu.com/s/1fq8LddDexRBqzBhZi4760Q 提取碼: hjif
JDK8: 連結: https://pan.baidu.com/s/1sQhSR5GgmxB3STpihOqCAw 提取碼: 0b6l
mysql-connector的jar包:連結: https://pan.baidu.com/s/1kxhqT8eB-V5Az5qpxT8nhw 提取碼: 23pu
二、準備測試環境
2.1 JDK 安裝
因為mycat是基於JAVA語言編寫的,所以在安裝mycat的時候,需要先安裝JDK,mycat需要的JDK8,可以使用我給的JDK連結下載後安裝,也可以直接線上安裝。
線上安裝指令:yum install java-1.8.0-openjdk* -y (基於centos7上的安裝)
安裝好之後,執行 java -version,看到一下輸出表示安裝成功
[root@localhost centos7]# java -version openjdk version "1.8.0_392" OpenJDK Runtime Environment (build 1.8.0_392-b08) OpenJDK 64-Bit Server VM (build 25.392-b08, mixed mode)
2.2 MySQL伺服器準備
因mycat主要功能有分庫分表和讀寫分離,所以至少需要準備兩臺具有mysql(8.0.27)服務的伺服器,這裡我準備了三臺測試伺服器.
伺服器1:192.168.3.90 安裝了JDK8, MySQL-8.0.27
伺服器2:192.168.3.91 安裝了JDK8, MySQL-8.0.27,mycat1.6
伺服器3:192.168.3.92 安裝了JDK8, MySQL-8.0.27
說明伺服器1和伺服器3作為mysql伺服器使用,伺服器2即作為mysql伺服器使用,也作為mycat伺服器使用。
2.3 Mycat準備
將下載好的 Mycat-server-1.6.7.3-release-20210913163959-linux.tar.gz 和 mysql-connector-java-8.0.27.jar 放在192.168.3.91伺服器的 /usr/local/下
解壓 Mycat : tar -zxvf Mycat-server-1.6.7.3-release-20210913163959-linux.tar.gz
解壓之後就會有一個mycat資料夾
三、Mycat檔案目錄
進入到mycat資料夾,可以看到裡面有5個資料夾一個版本說明的檔案
- bin: 存放可執行檔案,用於啟動停止mycat
- conf: 存放mycat的配置檔案
- lib: 存放mycat的專案依賴包(jar包)
- logs: 存放mycat的日誌檔案
說明:因為Mycat1.6 預設的mysql聯結器是是mysql5+的版本,現在我的mysql版本都是8+的,所以需要將mycat的mysql聯結器替換一下,而替換的檔案,就是我給大家下載的mysql-connector-java-8.0.27.jar,這是mysql8+的的聯結器。
替換步驟,首先進入到mycat的lib檔案中找到:mysql-connector-java-5.1.35.jar ,然後刪除,在將我給大家的 mysql-connector-java-8.0.22.jar 複製進來
注意:複製的這個進入是沒有執行許可權了,需要給mysql-connector-java-8.0.27.jar 增加執行許可權:chmod 777 mysql-connector-java-8.0.27.jar
四、mycat邏輯結構
說明:mycat只做邏輯處理,並不儲存資料,其真實資料仍然是儲存在mysql資料庫中的。
五、mycat小案例
5.1 需求
現有tb_order資料表,表中資料量很大,磁碟IO及容量都達到瓶頸,現在需要對tb_order表進行資料分片,分為三個資料節點,每個節點主機位於不同的伺服器上,在dataNode1,dataNode2和dataNode3中TB_ORDER的表結構一樣,儲存的資料不一樣,即採用水平分表的策略儲存資料。結構如下:
5.2 建立資料庫
原始資料庫:裡面處理系統建立的資料庫外,沒有任何自己建立的資料庫。
現在需要根據需求在每個伺服器上都建立db01資料庫
5.3 mycat分片配置schema.xml
在mycat中做分片配置的主要是在conf資料夾下面的schema.xml中配置,裡面有關於邏輯庫、邏輯表、資料節點、節點主機、分片規則等配置。
修改後的schema.xml如下
5.4 mycat 使用者及許可權配置server.xml
server.xml的配置比較多,我們只需要更改其中user的部分
5.5 mycat 啟動
切換到mycat的安裝目錄中的bin資料夾下,執行如下指令 ./mycat start (啟動) 和 ./mycat stop (停止),mycat 預設埠 8066
注意:我們要想判斷mycat是否啟動成功可以使用 tail -f /usr/local/mycat/logs/wrapper.log 檢視日誌,如果日誌中出現"MyCAT Server startup successfully. see logs in logs/mycat.log" 則說明啟動成功
5.6 mycat 登入
登入指令:mysql -h 192.168.3.91 -P 8066 -uroot -p, 這個指令是和普通的mysql資料庫連線是一樣的,所以使用mycat對程式設計師來說是無感的。
然後建立TB_ORDER表,這是報了一個錯誤:ERROR 1105 (HY000): backend connect: java.lang.IllegalArgumentException: Invalid DataSource:0
這裡報的錯誤未必就是其具體的錯誤描述,至於到底是什麼錯誤,需要我們去看一下mycat.log中的具體問題
這個錯誤表明資料庫伺服器在192.168.3.30上因為連線錯誤被阻止了。你可能在某個地方有一臺嘗試連線到這個資料庫伺服器的裝置或應用程式,導致了連線錯誤。需要使用mysqladmin -u root -p flush-hosts 解除阻止就行了。
注意:mysqladmin是mysql的指令,需要進入到mysql安裝目錄下的bin目錄下,或者將該指令新增到了環境變數中,方可直接使用。
在此建立表,即可成功
關於mycat小案例,啟動mycat,使用mycat連線資料庫,使用mycat建立表就演示到這裡,後面的部落格繼續講解mycat的使用