參考文檔 "MyCat權威指南" "MyCat項目主頁" "學會資料庫讀寫分離、分表分庫——用Mycat,這一篇就夠了!" MyCat安裝 "Java SDK下載" (必須JDK7或更高版本) "MYSQL下載" (MyCat支持多種資料庫接入 如:MYSQL、SQLService、Oracle、M ...
參考文檔
MyCat權威指南
MyCat項目主頁
學會資料庫讀寫分離、分表分庫——用Mycat,這一篇就夠了!
MyCat安裝
Java SDK下載(必須JDK7或更高版本)
MYSQL下載 (MyCat支持多種資料庫接入 如:MYSQL、SQLService、Oracle、MongDB等)
MyCat下載(選擇穩定版且適合自己系統的壓縮包)
MyCat目錄介紹
目錄 | 說明 |
---|---|
bin | 封裝成服務的命令 |
catlet | mycat擴展功能 |
conf | 配置信息 |
lib | 引用的jar包 |
log | 日誌文件,包括mycat啟動和運行日誌 |
其中著重說明下conf目錄下的配置文件信息
文件 | 說明 |
---|---|
server.xml | 定義用戶以及系統相關變數 |
schema.xml | 定義邏輯庫,表,分片節點 |
rule.xml | 定義分片規則 |
前置
伺服器 | IP | 說明 |
---|---|---|
MyCat | 127.0.0.1 | mycat伺服器 |
MYSQL DB 1 | 127.0.0.1:3306 | mysql資料庫 |
MYSQL DB 2 | 127.0.0.1:3307 | mysql資料庫 |
mycat服務埠8806,可以通過shell或者sql管理工具來直接連接。
mycat管理埠9906,連接後可以根據命令查看mycat的運行情況。可以使用mycat-web來配置一個可視化的UI管理後臺。
DB1和DB2先建立主從同步功能,DB1為主DB2為從,具體配置請參考上一節隨筆。
配置信息
server.xml
<!-- 用戶節點配置 -->
<!-- name:連接mycat的用戶名 -->
<user name="root" defaultAccount="true">
<!-- password:連接mycat的密碼 -->
<property name="password">123456</property>
<!-- 資料庫名,與schema.xml中的配置關聯,多個用逗號分開 -->
<property name="schemas">TESTDB</property>
<!-- 表級 DML 許可權設置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
schema.xml
<!-- 資料庫配置,與server.xml中的資料庫對應 -->
<!--
name:邏輯資料庫名,與server.xml中的schema對應
checkSQLschema:資料庫首碼相關設置
sqlMaxLimit:查詢時預設limit,避免全表查詢
-->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<!-- 分片配置 -->
<dataNode name="dn1" dataHost="localhost1" database="db01" />
<!-- 物理資料庫配置 -->
<!--
minCon:指定每個讀寫實例連接池的最小連接,初始化連接池的大小
maxCon:指定每個讀寫實例連接池的最大連接。也就是說,標簽內嵌套的 writeHost、readHost 標簽都會使用這個屬性的值來實例化出連接池的最大連接數。
dbDriver:指定連接後端資料庫使用的 Driver,目前可選的值有 native 和 JDBC。從 1.6 版本開始支持 postgresql 的 native 原始協議。
balance:均衡負載方式
0:不開啟讀寫分離機制,所有讀操作都發送到當前可用的 writeHost 上
1:全部的 readHost 與 stand by writeHost 參與 select 語句的負載均衡
2:所有讀操作都隨機的在 writeHost、readhost 上分發
3:所有讀請求隨機的分發到 wiriterHost 對應的 readhost 執行,writerHost 不負擔讀壓力
writeType:均衡負載方式
0: 所有寫操作發送到配置的第一個 writeHost,第一個掛了切到還生存的第二個writeHost,重新啟動後已切換後的為準,切換記錄在配置文件中:dnindex.properties .
1:所有寫操作都隨機的發送到配置的 writeHost,1.5 以後廢棄不推薦
switchType:切換方式
-1: 表示不自動切換
1:預設值,自動切換
2:基於 MySQL 主從同步的狀態決定是否切換
3:基於 MySQL galary cluster 的切換機制(適合集群),心跳語句為 show status like ‘wsrep%’.
-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="0" slaveThreshold="100">
<!--心跳檢測-->
<heartbeat>select user()</heartbeat>
<writeHost host="hostMaster" url="127.0.0.1:3306" user="root"
password="123456">
<readHost host="hostSlave" url="127.0.0.1:3307" user="root" password="123456" />
</writeHost>
</dataHost>
預期效果
開啟MYSQL3306和3307服務,啟動MyCat(mycat安裝目錄bin下,點擊startup_nowrap.bat即可),使用Navicat Premium可視化管理工具,連接三者。在mycat服務端下,為表CRUD時,可看到相應的效果。
在查詢時,查看mycat運行日誌mycat
.log可以看到連接的是配置的讀資料庫3307。
INFO [$_NIOREACTOR-3-RW] (io.mycat.backend.mysql.nio.handler.NewConnectionRespHandler.connectionAcquired(NewConnectionRespHandler.java:44)) - connectionAcquired MySQLConnection [id=17, lastTime=1526867502288, user=root, schema=db01, old shema=db01, borrowed=true, fromSlaveDB=true, threadId=34, charset=utf8, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=127.0.0.1, port=3307, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]
非查詢語句時則操作的是資料庫3306。
可使用@@port來追蹤操作的是哪個庫