天天看點

CentOS6.6安裝使用MyCat

1. 安裝Java環境

MyCAT 是使用 JAVA 語言進行編寫開發,使用前需要先安裝 JAVA 運作環境(JRE),由于 MyCAT 中使用了JDK7 中的一些特性,是以要求必須在 JDK7 以上的版本上運作。

1.1 檢視是否已經安裝jdk

[root@localhost lmy]# rpm -qa | grep java
    [root@localhost lmy]# 
           

顯示沒有安裝jdk,若是存在centOS自帶的,openjdk,需要解除安裝。

1.2下載下傳安裝JDK

1.2.1首先建立檔案夾,然後下載下傳jdk,我下載下傳的是64位的jdk8,需要根據需要到下載下傳位址選擇自己所需的版本。

[root@localhost lmy]# cd /
[root@localhost /]# cd usr/local
[root@localhost local]# mkdir java
[root@localhost local]# cd java
[root@localhost java]# wget http://202.119.24.249/cache/9/02/download.oracle.com/bcd3e06fe42195d3f3496e6548f0152a/jdk-8u151-linux-x64.tar.gz   
[root@localhost java]# ls
jdk-u151-linux-x64.tar.gz
           

1.2.2此時已經下載下傳好了jdk,接下來就是解壓配置了。

解壓

[root@localhost java]# tar -zxvf jdk-8u151-linux-x64.tar.gz 
[root@localhost java]# ls
jdk1.  jdk-u151-linux-x64.tar.gz
           

打開配置檔案

将下面的配置資訊放在最下面,儲存退出。(注意位址要根據自己的來寫。)

export JAVA_HOME=/usr/local/java/jdk1.  

export JRE_HOME=/usr/local/java/jdk1./jre  

export PATH=$PATH:/usr/local/java/jdk1./bin  

export
CLASSPATH=./:/usr/local/java/jdk1./lib:/usr/local/java/jdk1./jre/lib
           

使配置生效

檢視Java版本

[root@localhost java]# java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build .0_151-b12)
Java HotSpot(TM) -Bit Server VM (build -b12, mixed mode)
           

到這裡Java環境就安裝好了。

2. 安裝MySQL

2.1 解除安裝原有的mysql

首先檢視系統中是否已經安裝mysql

[root@localhost java]#  rpm -qa | grep mysql
mysql-libs-.-.el6_5.x86_64
           

此時顯示系統中并沒有安裝mysql,如果已經安裝了,使用該指令解除安裝删除。

[root@localhost java]# rpm -e mysql         //普通删除方式
[root@localhost java]# rpm -e --nodeps mysql    // 強力删除模式,如果使用上面指令删除時,提示有依賴的其它檔案,則用該指令可以對其進行強力删除
           

2.2 通過yum來進行mysql的安裝

出現如下提示就表明安裝成功了!

CentOS6.6安裝使用MyCat

我們可以檢視一下安裝完成的版本。

當然,此時我們安裝的并不是最新版本。我們可以啟動一下mysql看看。

CentOS6.6安裝使用MyCat

2.3配置mysql

為root使用者設定密碼:

設定mysql開機啟動

[root@localhost java]# chkconfig mysqld on
[root@localhost java]# chkconfig --list | grep mysql
mysqld   :off  :off   :on    :on    :on    :on    :off
           

接下來我們就可以登入我們的mysql資料庫了。

CentOS6.6安裝使用MyCat

到這為止mysql也已經安裝完成了。

3. 安裝MyCat

MyCat的安裝比較簡單,隻要下載下傳下來解壓,然後就是編寫配置檔案了。

3.1 下載下傳解壓MyCat

此時我下載下傳的版本為1.6,你也可以根據自己的需要到下載下傳位址選擇需要的版本下載下傳。

[root@localhost java]# cd /usr/local/java/    //下載下傳到該目錄

[root@localhost java]# wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

[root@localhost java]# tar -zxvf Mycat-server--RELEASE--linux.tar.gz   //解壓

[root@localhost java]# ls   //可以看到解壓後的檔案夾名為mycat
jdk1_151
jdk-u151-linux-x64.tar.gz
mycat
Mycat-server--RELEASE--linux.tar.gz
           

測試啟動mycat.

Linux環境下啟動mycat的方式為:進入bin目錄下,使用 ./mycat start指令啟動。

[root@localhost bin]# ./mycat start
Starting Mycat-server...
           

3.2 測試MyCat

整體的結構是這樣的:有兩個表,一個user表,一個goods表。user表放在db01資料庫中,goods表使用分片的方法放在db02和db03資料庫中。雖然goods表被分片存儲在不同的資料庫中,但是通過MyCat通路goods表時仍然像一張表一樣。我們先在mysql中建立這三張表,然後通過MyCat将分片規則配置,再通過MyCat進行增删改查操作。

CentOS6.6安裝使用MyCat

3.2.1建立資料庫和表

首先我們先在mysql中建立三個資料庫和這三張表。腳本分别如下:

create database db01; 
use db01;
 CREATE TABLE user (  
    id INT NOT NULL AUTO_INCREMENT,  
    name varchar() NOT NULL default '',  
    indate DATETIME NOT NULL default '0000-00-00 00:00:00',  
    PRIMARY KEY (id)  
)AUTO_INCREMENT=  ENGINE=InnoDB DEFAULT CHARSET=utf8;  


create database db02;  
use db02;
 CREATE TABLE goods(  
    id INT NOT NULL AUTO_INCREMENT,  
    value INT NOT NULL default ,  
    indate DATETIME NOT NULL default '0000-00-00 00:00:00',  
    PRIMARY KEY (id)  
)AUTO_INCREMENT=  ENGINE=InnoDB DEFAULT CHARSET=utf8;

create database db03;  
use db03;
CREATE TABLE goods(  
    id INT NOT NULL AUTO_INCREMENT,  
    value INT NOT NULL default ,  
    indate DATETIME NOT NULL default '0000-00-00 00:00:00',  
    PRIMARY KEY (id)  
)AUTO_INCREMENT=  ENGINE=InnoDB DEFAULT CHARSET=utf8; 
           
CentOS6.6安裝使用MyCat

3.2.2配置MyCat.

下面我們要配置三個檔案,在mycat/conf目錄裡面。

conf/server.xml 中定義使用者以及系統相關變量,如端口等.

conf/schema.xml 中定義邏輯庫,表、分片節點等内容.

conf/rule.xml 中定義分片規則.

以下為三個配置檔案。

server.xml

<?xml version="1.0" encoding="UTF8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">

    <system>    
        <property name="defaultSqlParser">druidparser</property>
        <property name="serverPort">8066</property>
        <property name="managerPort">9066</property>
    </system>

    <!-- 新增一個user -->
    <user name="mycat">
        <property name="password">mycat</property>
        <property name="schemas">TESTDB</property>
    </user>

</mycat:server>
           

schema.xml

<?xml version="1.0" encoding="UTF8"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <!-- 設定表的存儲方式.schema name="TESTDB" 與 server.xml中的 TESTDB 設定一緻  -->  
    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">  
        <table name="user" primaryKey="id"  dataNode="node_db01" />  
        <table name="goods" primaryKey="id" dataNode="node_db02,node_db03" rule="rule1" />  

    </schema>  

    <!-- 設定dataNode 對應的資料庫,及 mycat 連接配接的位址dataHost -->  
    <dataNode name="node_db01" dataHost="dataHost01" database="db01" />  
    <dataNode name="node_db02" dataHost="dataHost01" database="db02" />  
    <dataNode name="node_db03" dataHost="dataHost01" database="db03" />  

    <!-- mycat 邏輯主機dataHost對應的實體主機.其中也設定對應的mysql登陸資訊 -->  
    <dataHost name="dataHost01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">  
            <heartbeat>select user()</heartbeat>  
            <writeHost host="server1" url="127.0.0.1:3306" user="root" password="123456"/>  
    </dataHost>  
</mycat:schema>
           

rule.xml

<?xml version="1.0" encoding="UTF8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
    <tableRule name="rule1">
        <rule>
            <columns>id</columns>
            <algorithm>mod-long</algorithm>
        </rule>
    </tableRule>
     <!-- 分片規則為模2運算 -->  
    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
        <!-- how many data nodes -->
        <property name="count">2</property>
    </function>
</mycat:rule>
           

三個配置檔案配置完之後,重新開機mycat服務。

[root@localhost bin]# cd /usr/local/java/mycat/bin/
[root@localhost bin]# ./mycat restart
           

3.2.3測試結果

我們先通路mycat邏輯資料庫,此時的視角是看不出分庫分表的資訊,這些表就好像在一個資料庫中。

*補充:後來我在其它機器上實驗時,設定了兩個datahost,啟動mycat時一直報錯

[[email protected] conf]$ mysql -umycat -pmycat -h127.0.0.1 -P8066 -Dtestdb

ERROR 2003 (HY000): Can’t connect to MySQL server on ‘127.0.0.1’ (111)

我查找了server.xml schema.xml發現使用者名,密碼都沒有配置錯,端口也開放了,最後發現有一個datahost的沒有寫,希望以後對碰到此類問題的朋友有幫助。*

CentOS6.6安裝使用MyCat

ok,現在我們可以往這兩個表中插入資料,看看mycat能否按照我們之前的規則,将資料插入到相應的資料庫表中。

insert into user(name,indate) values('hello',now());
insert into user(name,indate) values('world',now());
insert into goods(id,value,indate) values(,,now());
insert into goods(id,value,indate) values(,,now());
           
CentOS6.6安裝使用MyCat

可以看到,對于mycat的邏輯表來說,資料已經插入成功了,但是實際上資料是否按照規則存在那三個資料庫中呢?我們登入實際的資料庫來檢視。

CentOS6.6安裝使用MyCat
CentOS6.6安裝使用MyCat
CentOS6.6安裝使用MyCat

我們看到,插入到user表中的資料全部都在db01的user表中,插入到goods表中的資料分别放在了db02和db03資料庫中的goods表中。完美的完成了分庫分表的操作!