Mycat快速入門
1.Mycat介紹
Mycat 是一個開源的分布式數據庫系統,是一個實現了 MySQL 協議的的Server,前端用戶可以把它看作是一個數據庫代理,用 MySQL 客戶端工具和命令行訪問,而其後端可以用MySQL 原生(Native)協議與多個 MySQL 服務器通信,也可以用 JDBC 協議與大多數主流數據庫服務器通信,其核心功能是分表分庫,即將一個大表水平分割為 N 個小表,存儲在後端 MySQL 服務器裏或者其他數據庫裏。
2.Mycat基礎環境搭建
首先需要下載Mycat必需的一些環境:
jdk下載(1.7以上) –mycat是基於java開發的,需要java編譯環境
mysql
mycat
1) JDK 下載
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
註:必須 JDK7 或更高版本.
2) MySQL 下載
http://dev.mysql.com/downloads/mysql/5.5.html#downloads
註:MyCAT 支持多種數據庫接入,如:MySQL、SQLServer、Oracle、MongoDB 等,推薦使用
MySQL 做集群。
3) MyCAT 項目主頁
https://github.com/MyCATApache/
註:MyCAT 相關源碼、文檔都可以在此地址下進行下載
3.Mycat配置
為了快速跑起一個Mycat demo,我們先在本地數據庫裏面建立test1和test2數據庫,創建一個名為opt的表,字段為id(int)及name(varchar)
Mycat的主要配置文件在其conf目錄下面,分別是server.xml、schema.xml和rule.xml,為快速啟動mycat,我們按照配置的順序和主要配置項說明。
1)server.xml
這裏主要配置mycat的用戶和權限信息,這裏的賬戶用於後面連接mycat使用。
快速入門可以簡單這樣配置:
schemas是後面schema.xml裏面配置的DB,例如:我這裏配置了一個用戶名為user,密碼為666666的賬戶,默認只能訪問test的DB
<user name="user">
<property name="password">666666</property>
<property name="schemas">test</property>
</user>
2)schema.xml
這裏主要配置數據庫信息,一個schema就是一個邏輯庫,可以理解為Mycat管理的一個數據庫DB(實際上不存在,是一個虛擬的概念)name屬性和server.xml裏面對應。
table是Mycat的邏輯表,這裏我們配置一個名為opt的邏輯表
dataNode屬性是將其綁定在真實數據庫中的數據節點中,這裏我們配置了兩個dataNode,分別是test1數據庫和test2數據庫,註意,這兩個數據庫的真實表名需和table的name一致
dataHost屬性就是我們熟悉的mysql連接,這裏我們都用本地作為一臺服務器,也可以配置不同服務器上的不同mysql,這裏還可以配置讀寫分離,我們先不考慮。
rule屬性就是分片規則,這裏用的是名稱,需在下一步的rule.xml裏面定義好
<schema name="test" checkSQLschema="false" sqlMaxLimit="100">
<!-- 分片表配置 -->
<table name="opt" dataNode="dn$1-2" rule="rule1" />
</schema>
<dataNode name="dn1" dataHost="localhost1" database="test1" />
<dataNode name="dn2" dataHost="localhost1" database="test2" />
<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="666666" />
</dataHost>
3)rule.xml
這裏我們主要配置的是分片規則,Mycat支持很多分片規則,我們使用的是一個較為簡單的取模規則,即根據columns標簽裏面的id屬性來取模,count屬性定義為數據節點的個數。
<tableRule name="rule1">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">2</property>
</function>
4.Mycat啟動
1)window啟動:
window上啟動mycat需要用cmd命令到mycat的bin目錄下面,執行startup_nowrap.bat命令成功即可
2)linux啟動:
同樣,到bin目錄下面,執行startup_nowrap.sh命令成功即可
當看到如下圖顯示的啟動成功標識說明mycat啟動成功
註:若出現錯誤,可在其logs目錄下面查看錯誤信息,一般為配置錯誤
5.Mycat使用
啟動mycat成功後,我們通過本地sql連接工具,如Navicat建立到mycat的鏈接,其默認端口是8066,如果連接成功,可通過命令行執行一條插入語句的sql,如
INSERT INTO opt(id,name) VALUES(1,”3434”)查看是否插入到指定分庫的表裏面,若成功,說明Mycat可以正常使用
如圖所示:插入的數據分布到指定的庫裏面
註:mycat的插入語句必須有分片規則的字段,否則無法判定是插入哪個數據庫。
6.Mycat更多細節
以上只是簡單介紹了如何快速啟動一個Mycat的demo,關於更詳細的配置信息及更為復雜的分片規則和sql,可以參考Mycat的官方介紹文檔
http://www.mycat.org.cn/document/Mycat_V1.6.0.pdf
Mycat快速入門