一 說明
這裡隻寫了部署方法,相關說明請到官網查。官網寫得有點爛,個人推薦網站(https://www.w3cschool.cn/mycat2/mycat2-fksq3krj.html)
官網:http://www.mycat.org.cn/
安裝包下載下傳:http://dl.mycat.org.cn/
mycat1.6部署:https://www.toutiao.com/item/7237731828113818146/
環境說明:系統:centos7.9 目錄:/usr/local/mycat
MyCat1.x和MyCat2的差別
功能 mycat1.6 mycat2
多語句 不支援 支援
blob值(二進制大對象) 支援一部分 支援
全局二級索引 不支援 支援
任意跨庫join(包含複雜查詢) catlet支援 支援
關聯子查詢 不支援 支援一部分
分庫同時分表(亮點) 不支援 支援一部分
存儲過程 支援固定形式 支援更多
邏輯視圖 不支援 支援
實體視圖 支援 支援
批量插入 不支援 支援
執行計劃管理 不支援 支援
路由注釋 支援 支援
叢集功能 支援 支援更多叢集
自動hash分片算法 不支援 支援
支援第三方監控 支援mycat-web 支援普羅米斯,kafka,日志監控
流式合并結果集 支援 支援
範圍查詢 支援 支援
單表映射屋裡表 不支援 支援
XA事務 弱XA 支援
支援mysql8 需要修改mysql8的伺服器配置支援 支援
虛拟表 不支援 支援
union all 文法 不支援 支援
二 部署
1/下載下傳安裝包
1/下載下傳兩個包 位址:http://dl.mycat.org.cn/2.0/
下載下傳檔案分别為:
2/把jar包到mycat2中
把mycat2-1.22-release-jar-with-dependencies.jar 檔案放到mycat2-install-template-1.21.zip包中\mycat2-install-template-1.21\mycat2\lib 路徑下
3/設定權限
權限+x就行(我隻留linux的檔案了)
[root@HK_192_168_5_35 bin]#cd /usr/local/mycat/bin
[root@HK_192_168_5_35 bin]#chmod +x *.sh
[root@HK_192_168_5_35 bin]# ll
總用量 368
-rwxr-xr-x 1 root root 15666 3月 5 2021 mycat
-rwxr-xr-x 1 root root 140198 3月 5 2021 wrapper-linux-ppc-64
-rwxr-xr-x 1 root root 99401 3月 5 2021 wrapper-linux-x86-32
-rwxr-xr-x 1 root root 111027 3月 5 2021 wrapper-linux-x86-64
4/配置資料庫
進入mycat2/conf/datasources/prototypeDs.datasource.json 配置一個可以用的資料庫
啟動mycat之前需要确認prototype資料源所對應的mysql資料庫配置,修改對應的user(使用者),password(密碼),url中的ip
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ_WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"prototypeDs",
"password":"123456",
"type":"JDBC",
"url":"jdbc:mysql://192.168.5.3:3306/aaaaa?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
"user":"root",
"weight":0
}
5/運作
cd mycat/bin
./mycat start 啟動
./mycat stop 停止
./mycat console 前台運作
./mycat install 添加到系統自動啟動(暫未實作)
./mycat remove 取消随系統自動啟動(暫未實作)
./mycat restart 重新開機服務
./mycat pause 暫停
./mycat status 檢視啟動狀
預設使用者密碼端口為:root 123456 8066; 可以使用navicat遠端通路就行了。
[root@HK_192_168_5_2 ~]# mysql -uroot -p123456 -h'192.168.5.2' -P'8666'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.33-mycat-2.0 Percona XtraDB Cluster (GPL), Release rel39, Revision 5197785, WSREP version 31.55, wsrep_31.55
Copyright (c) 2009-2021 Percona LLC and/or its affiliates
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
[email protected] 17:09: [(none)]>
可以使用Navicat通路
預設隻有information_schema;mysql;performance_schema的庫
三 mycat2實作讀寫分離
配置順序
mysql資料源 -》 mycat叢集 -》邏輯庫表(mycat指向叢集和mysql源庫)
1/添加mysql資料源
增加資料源:主資料源和從資料源;
cd /mycat/conf/datasources
cp prototypeDs.datasource.json aa_master.datasource.json
cp prototypeDs.datasource.json aa_slave01.datasource.json
cp prototypeDs.datasource.json aa_slave02.datasource.json
分别修改三個配置檔案
vim aa_master.datasource.json
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ_WRITE", //隻讀還是讀寫
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"aa_master", //跟配置叢集檔案/data/mycat2/conf/clusters/*.cluster.json檔案的masters配置項有關連
"password":"123456", //mysql密碼
"type":"JDBC",
"url":"jdbc:mysql://192.168.5.2:3306/aa?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8", //通路mysql資料庫位址
"user":"root", //通路mysql資料庫的使用者
"weight":0
}
vim aa_slave01.datasource.json aa_slave02.datasource.json
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ", //隻讀還是讀寫
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"aa_master", //跟配置叢集檔案/data/mycat2/conf/clusters/*.cluster.json檔案的masters配置項有關連
"password":"123456", //mysql密碼
"type":"JDBC",
"url":"jdbc:mysql://192.168.5.3:3306/aa?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8", //通路mysql資料庫位址
"user":"root", //通路mysql資料庫的使用者
"weight":0
}
2/配置mycat叢集
配置叢集所在目錄 mycat/conf/clusters
命名方式 {叢集名字}.clusters.json
配置内容:
{
"clusterType":"MASTER_SLAVE",
"heartbeat":{
"heartbeatTimeout":1000,
"maxRetry":3, //2021-6-4前是maxRetry,後更正為maxRetryCount
"minSwitchTimeInterval":300,
"slaveThreshold":0
},
"masters":[ //配置多個主節點,在主挂的時候會選一個檢測存活的資料資料源作為主節點
"aa_master"
],
"replicas":[ //配置多個從節點,隻讀的
"aa_slave01",
"aa_slave02"
],
"maxCon":200,
"name":"aa", //叢集的名稱,一般我寫成資料源的庫名
"readBalanceType":"BALANCE_ALL",
"switchType":"SWITCH"
////////////////////////////////////可選//////////////////////////////////
,
"timer":{ //MySQL叢集心跳周期,配置則開啟叢集心跳,Mycat主動檢測主從延遲以及高可用主從切換
"initialDelay": 30,
"period":5,
"timeUnit":"SECONDS"
}
}
說明:
clusterType可選配置如下:
SINGLE_NODE:單一節點
MASTER_SLAVE:普通主從
GARELA_CLUSTER:garela cluster/PXC叢集
readBalanceType可選值如下:
BALANCE_ALL(預設值):擷取叢集中所有資料源
BALANCE_ALL_READ:擷取叢集中允許讀的資料源
BALANCE_READ_WRITE:擷取叢集中允許讀寫的資料源,但允許讀的資料源優先
BALAN
3/邏輯庫表
配置邏輯庫表,實作分庫分表,配置所在目錄:mycat/conf/schemas
命名方式:{庫名}.schemas.json
配置内容:
{
"schemaName": "chinavered", //navicat顯示的庫名也是存在實體庫
"targetName": "chinavered", //叢集的名稱。
"normalTables": {} //配置分庫分表等,沒去研究
}
4/重新開機Mycat2
./mycat restart 重新開機服務
可以檢視日志是否正常/data/mycat2/logs/wrapper.log
5/mycat使用者密碼
(1)、所在目錄:mycat/conf/users
(2)、命名方式:{使用者名}.user.json
内容如下:
{
"dialect":"mysql",
"ip":null,
"password":"123456",
"transactionType":"proxy",
"username":"root"
}
字段含義:
ip:用戶端通路ip,建議為空,填寫後會對用戶端的ip進行限制
username:使用者名
password:密碼
transactionType:事務類型
可選值:
proxy:本地事務,在涉及大于1個資料庫的事務,commit階段失敗會導緻資料不一緻,但是相容性最好
xa事務,需要确認存儲節點的叢集類型是否支援xa
可以通過配置切換:
"transactionType":'xa'
"transactionType":'proxy'
6/使用Navica通路
預設:端口:8066 使用者:root 密碼:123456
mycat2連接配接24個mysql資料庫。
7/相關查詢指令
檢視配置的資料源資訊
/*+ mycat:showDataSources{} */
檢視配置叢集資訊
/*! mycat:showClusters{} */
檢視使用者
/*+ mycat:showUsers */
顯示session引用的IO緩沖塊計數
/*+ mycat:showBufferUsage{}*/
顯示schema
/*+ mycat:showSchemas{}*/
顯示排程器
/*+ mycat:showSchedules{}*/
顯示心跳配置
/*+ mycat:showHeartbeats{}*/
顯示心跳狀态
/*+ mycat:showHeartbeatStatus{}*/
顯示執行個體狀态
/*+ mycat:showInstances{}*/
顯示Reactor狀态
/*+ mycat:showReactors{}*/
顯示線程池狀态
/*+ mycat:showThreadPools{}*/
顯示表
/*+ mycat:showTables{"schemaName":"mysql"}*/
顯示mycat連接配接
/*+ mycat:showConnections{}*/