這篇文章主要介紹了mycat在windows環境下的安裝和啓動過程,需要的朋友參考下吧
1、下載
從如下地址下載mycat的安裝包:
2、解壓
解壓下載的安裝包
3、安裝
安裝mycat前需要先安裝jdk和mysql。mycat1.6版本建議使用的jdk是1.7以上版本,mysql建議使用5.6版本。安裝玩jdk和mysql後,進入mycat解壓目錄下的bin目錄,如本文的路徑如下:
D:\Program Files (x86)\mycat\bin
安裝shift鍵,點擊鼠標右鍵,選擇"在此處打開命令窗口"打開命令行窗口(注意需要管理員賬戶登錄,如果不是請使用管理員身份運行cmd打開命令行窗口)。在打開的命令行窗口中執行如下命令安裝mycat:
mycat.bat install
4、啓動和停止
可以使用如下命令啓動mycat服務
mycat.bat start
啓動後可以通過如下命令查看mycat的運行狀態:
mycat.bat status
可以使用如下命令停止mycat服務
mycat.bat stop
5、測試
5.1、修改mycat與mysql的鏈接信息
我們打開mycat安裝目錄,並進入conf目錄,打開schema.xml配置文件,schema.xml配置文件是mycat中重要的配置文件之一,它涵蓋了mycat的邏輯庫、表、分片規則、分批按節點及數據源。這裏我們對默認的schema.xml進行簡單的修改配置(注意備份一個原始的配置文件),主要配置本機的mysql鏈接信息。找到dataHost節點,按照當前自己mysql的配置信息來修改配置。如下爲我修改後的該部分配置:
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="localhost:3306" user="root" password="root"> <!-- can have multi read hosts --> <!--<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />--> </writeHost> <!-- <writeHost host="hostS1" url="localhost:3316" user="root" password="123456" /> --> <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> --> </dataHost>
我主要修改了hostM1的鏈接密碼,同時註釋了名稱爲hostS2的只讀標籤和名稱爲hostM2的寫標籤。
5.2、創建數據庫
按照schema.xml配置中的示例,我們需要建立分別名爲db1、db2、db3的數據庫。鏈接mysql,建立相關的數據庫:
mysql -uroot -proot; create database db1 character set utf8; create database db2 character set utf8; create database db3 character set utf8;
5.3、鏈接數據庫
使用數據庫鏈接工具或命令。本文使用navicat鏈接數據庫。使用navicat鏈接數據庫時的主要參數配置如下:
端口號:8066
用戶名和密碼可以查看mycat conf目錄中的server.xml中的定義,本文使用的是默認的root,123456來連接,連接成功後只能操作名爲TESTDB的數據庫;
5.4、全局表的測試
使用navicat打開命令列界面。輸入如下命令創建數據表:
USE TESTDB; create table company(id int not null primary key,name varchar(100),sharding_id int not null);
之後使用如下命令查看創建表命令的執行狀態:
explain create table company(id int not null primary key,name varchar(100),sharding_id int not null);
因爲company在schema.xml中北定義爲了全局表,所以正常情況下可以看到如下類似結果:
+-----------+----------------------------------------------------------------------------------------------+ | DATA_NODE | SQL | +-----------+----------------------------------------------------------------------------------------------+ | dn1 | create table company(id int not null primary key,name varchar(100),sharding_id int not null) | | dn2 | create table company(id int not null primary key,name varchar(100),sharding_id int not null) | | dn3 | create table company(id int not null primary key,name varchar(100),sharding_id int not null) | +-----------+----------------------------------------------------------------------------------------------+ rows in set
緊接着我們嘗試執行如下命令執行一條插入數據的操作:
insert into company(id,name,sharding_id) values(1,'leader us',10000);
然後類似執行explain命令查看insert命令的執行狀態:
explain insert into company(id,name,sharding_id) values(1,'leader us',10000);
正常情況下我們會看到如下結果:
+-----------+----------------------------------------------------------------------+ | DATA_NODE | SQL | +-----------+----------------------------------------------------------------------+ | dn1 | insert into company(id,name,sharding_id) values(1,'leader us',10000) | | dn2 | insert into company(id,name,sharding_id) values(1,'leader us',10000) | | dn3 | insert into company(id,name,sharding_id) values(1,'leader us',10000) | +-----------+----------------------------------------------------------------------+ rows in set
之後我們直接登錄到mysql服務器分別查看db1、db2、db3三個數據庫,可以看到數據庫中都創建了名爲company的數據表,同時表中都插入了名爲leader us的數據。
5.5、水平分表測試
如5.4中的操作。我們在navicat的命令列窗口中執行如下命令創建travelrecord表:
create table travelrecord(id int not null primary key,name varchar(100));
之後使用explain查看:
explain create table travelrecord(id int not null primary key,name varchar(100));
結果如下:
+-----------+--------------------------------------------------------------------------+ | DATA_NODE | SQL | +-----------+--------------------------------------------------------------------------+ | dn1 | create table travelrecord(id int not null primary key,name varchar(100)) | | dn2 | create table travelrecord(id int not null primary key,name varchar(100)) | | dn3 | create table travelrecord(id int not null primary key,name varchar(100)) | +-----------+--------------------------------------------------------------------------+ rows in set
然後執行如下命令插入一條數據:
insert into travelrecord(id,name) values(1,'hp');
執行explain查看執行結果:
explain insert into travelrecord(id,name) values(1,'hp');
結果如下:
+-----------+--------------------------------------------------+ | DATA_NODE | SQL | +-----------+--------------------------------------------------+ | dn1 | insert into travelrecord(id,name) values(1,'hp') | +-----------+--------------------------------------------------+ row in set
可以登錄到數據庫分別查看,三個數據庫中都創建了travelrecord的數據表,但是僅db1(dn1對應的數據庫)中插入了數據。