MYCAT-SERVER1.5.1簡易入門教程
一、安裝java
因Mycat是用java開發的,所以需要在實驗環境下安裝java,官方建議jdk1.7及以上版本
將檔案上傳到/usr/local/目錄下,解壓jdk-7u79-linux-x64.tar.gz檔案。
命令:
# tar -zxvf jdk-7u79-linux-x64.tar.gz
二、MYSQL配置 mysql-5.6.25-linux-glibc2.5-x86_64.tar.gz
安裝步驟略
三、MYCAT配置
上傳檔案到/usr/local/目錄下
# tar -zxvf Mycat-server-1.5.1-RELEASE-20160405120037-linux.tar.gz
# cd mycat/conf
#修改MYCAT/conf/wrapper.conf 檔案中jdk/java路徑,並儲存退出。
# vim wrapper.conf
# vim schema.xml 編輯MYCAT邏輯資料庫配置檔案。
dataHost屬性解析:
name:唯一名稱,maxCon:物理資料庫,最大連線執行緒,minCon為最小,balance=0:不開啟讀寫分離模式(即沒主從查詢分離),writeType=0:不開啟負載均衡,當第一個writeHost連線失敗,才用第二組。dbType:資料庫型別,dbDriver:資料庫驅動連線方式,其它資料庫可採用jdbc。switchType=1:自動切換,配置主從後,會根據主從心跳檢測切換。heartbeat:MYCAT與資料庫之間通訊心跳檢測語句。writeHost物理資料庫連線地址及使用者名稱密碼。
以上屬性詳解,請閱讀MYCAT指南。
修改資料庫連線地址後,儲存退出,如下圖
啟動MYCAT,日誌目錄下,顯示錯誤。原因是,沒有在/etc/hosts下配置mycatdb
配置mycatdb
修改下MYCAT日誌檔案級別,方便觀察,預設INFO級別。
# vim /usr/local/mycat/conf/log4j.xml
再次啟動MYCAT服務,檢視wrapper.log,mycat.log
啟動MYCAT成功,並建立了10個數據庫連線,連線三個邏輯節點對應的物理資料庫,服務埠8066,管理埠9066等。。。
檢視MYCAT/conf下,server.xml配置
連線8066埠
連線MYSQL資料庫,檢視資料庫及表,MYCAT邏輯資料庫,在物理資料庫上,並未真實存在。
在MYSQL物理資料庫上,建立TESTDB邏輯資料庫,三個分片節點對應的儲存庫名稱(這裡需要手工在MYSQL上建立)
在MYCAT上建立邏輯表,資料來源無法連線第一個資料來源,檢視MYCAT日誌,也說資料庫無法連線。
建立Travelrecord表
create table travelrecord (id bigint not null primary key,user_id varchar(100),traveldate DATE, fee decimal,days int);
解決辦法,因為MYCAT採用遠端連線方式,連線MYSQL,先檢視MYCAT連線使用者schema.xml中writeHost標籤裡使用者名稱是否有連線MYSQL許可權。
root使用者僅允許本地連線,不允許IP地址連線,給root使用者授權。
#允許root使用者遠端訪問,“%”表示,允許任何IP地址通用使用者名稱密碼連線。
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123123' WITH GRANT OPTION;
#重新整理許可權
mysql> FLUSH PRIVILEGES;
再到MYCAT裡建立邏輯表,並檢視,該邏輯表,被分別建立到三個邏輯節點對應的資料庫上。
在MYSQL物理庫上檢視,通過MYCAT,將表分別建立在db1、db2、db3,三個資料庫下。
在MYCAT上插入表資料,資料插入成功。
在MYSQL上檢視
三條記錄,通過MYCAT分片規則,被分配到了,三個不同database上。
分片規則定義檔案 mycat/conf/rule.xml,擷取rule.xml中片段展示
<tableRule name="auto-sharding-long"> <!--分片規則名稱-->
<rule>
<columns>id</columns><!--分片欄位,是指要分片的表中欄位-->
<algorithm>rang-long</algorithm><!--分片方法-->
</rule>
</tableRule>
<function name="rang-long" <!--分片方法定義-->
class="org.opencloudb.route.function.AutoPartitionByLong"><!--分片底層方法-->
<property name="mapFile">autopartition-long.txt</property><!--分片範圍定義檔案-->
</function>
檔案autopartition-long.txt內容: