文章目錄
一、Mycat安裝
1、Mycat官網下載
2、解壓文件
tar -xvf Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz
3、移動到系統的本地軟件目錄
mv mycat /usr/local/mycat
4、啓動Mycat
cd /usr/local/mycat/bin
./mycat start
參數: ./mycat { console | start | stop | restart | status | dump }
5、檢查啓動情況
第一種:查看端口號,默認端口:8066
netstat -tunlp|grep 8066
第二種:Mycat的命令
./mycat status
二、Mycat配置
1、schema.xml
這個文件是Mycat最重要的配置文件,負責管理庫、表、分片規則、DataNode、DataSource。
<schema name="MYCATDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="tb_user" dataNode="dn1,dn2,dn3" rule="mod-long"/>
</schema>
<dataNode name="dn1" dataHost="localhost1" database="db1"/>
<dataNode name="dn2" dataHost="localhost1" database="db2"/>
<dataNode name="dn3" dataHost="localhost1" database="db3"/>
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostS1" url="localhost:3306" user="root" password="root"/>
</dataHost>
屬性 | 釋義 |
---|---|
checkSQLschema | 是否去掉表前面的數據庫的名稱,默認false |
sqlMaxLimit | 相當於SQL加上limit 語句 |
heartbeat | 用於和後端數據庫進行心跳檢查的語句 |
2、server.xml
Server.xml保存了Mycat需要的所有的系統配置信息,代碼映射爲SystemConfig類。
<system>
<property name="charset">utf8</property>
<property name="defaultSqlParser">druidparser</property>
<property name="mutiNodeLimitType">1</property>
<property name="serverPort">8066</property>
<property name="managerPort">9066</property>
<property name="bindIp">0.0.0.0</property>
</system>
<user name="mycat">
<property name="password">mycat</property>
<property name="schemas">MYCATDB</property>
</user>
屬性 | 釋義 |
---|---|
charset | 字符集 |
processors | 處理線程數量,默認是cpu數量 |
processorBufferChunk | 每次讀取buffer的數量,默認4096 |
sequnceHandlerType | 全局ID生成方式。(0:本地文件方式,1:數據庫方式;2:時間戳序列方式;3:ZK生成ID;4:ZK遞增ID生成) |
idleTimeout | 指定連接的空閒超時時間,默認 30 分鐘 |
sqlExecuteTimeout | SQL 執行超時的時間,Mycat 會檢查連接上最後一次執行 SQL 的時間,若超過這個時間則會直接關閉這連接。默認時間爲 300 秒,單位秒 |
bindIp | Mycat 服務監聽的 IP 地址 |
serverPort | Mycat 的使用端口 |
managerPort | Mycat 的管理端口 |
useSqlStat | 是否開啓實時統計。1:開啓;0:關閉 |
useGlobleTableCheck | 是否開啓全局表一致性檢測。1:開啓;0:關閉 |
handleDistributedTransactions | 分佈式事務開關。0:不過濾分佈式事務;1:過濾分佈式事務;2 :不過濾分佈式事務,但是記錄分佈式事務日誌 |
3、rule.xml
rule.xml 裏面就定義了我們對錶進行拆分所涉及到的規則定義。
<tableRule name="mod-long">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<property name="count">3</property>
</function>
屬性 | 釋義 |
---|---|
columns | 要拆分的列名稱 |
algorithm | 使用function標籤中name屬性,連接表規則的路由算法 |
三、連接MySQL 8遇到的問題
目前Mycat仍主要面對MySQL 5.5、5.6、 5.7版,對最新的MySql 8尚未完全支持,需要用戶對MySQL 8和Mycat的配置進行一系列的修改。
1、Mycat的加密方式爲mysql_native_password,MySQL 8的默認加密方式爲caching_sha2_password。
解決方案:看了很多別人的辦法,改驅動jar包、改my.cnf、改url連接,太麻煩了!
下面這個方法我覺得最方便!其實就是單獨創建一個mycat用戶做連接,設置其加密方式爲mysql_native_password,並賦予權限。
CREATE USER 'mycat'@'%' IDENTIFIED BY 'mycat';
ALTER USER 'mycat'@'%' IDENTIFIED WITH mysql_native_password BY 'mycat';
GRANT ALL PRIVILEGES ON *.* TO 'mycat'@'%';
FLUSH PRIVILEGES;
2、Mycat使用圖形化工具創建表報錯
解決方案:使用SQL語句建表
3、使用命令連接Mycat報錯
解決方案:增加加密方式參數,如:mysql -umycat -p -P8066 -h127.0.0.1 --default-auth=mysql_native_password。