mycat學習筆記3:分庫分表

在以前將HDFS時,講過一個數據節點dataNode的概念還NameNode的概念,mycat使用的與其類似,在mycat中,dataNode就是數據庫,而mycat就充當的是NameNode的節點。是一箇中間件。

mycat的兩大核心:

  1.分庫分表(解決單表數據量過大的問題)java

  2.獨寫分離(解決單個數據庫訪問量大,壓力大的問題)mysql

什麼是分庫分表?

  將一個數據量大的表數據分放在不一樣的數據節點上,這種模式就稱爲分庫分表。linux

在分庫分表中,全部的數據節點都是平等的,沒有主從關係。redis

mycat實現分庫分表:

  需求:使用兩個mysql服務器,經過mycat添加數據,實現一條數據在mysql01,一條數據在mysql02上sql

  使用規則:mod-long數據庫

mycat是使用java編寫的,所以須要先配置jdk環境,在安裝mycatvim

1.官網下載mycatxxx.tar.gz服務器

2.xftp上傳到linux中的apps目錄中oracle

3.解壓壓縮包app

tar -zxvf Mycatxxx.tar.gz

4.配置環境變量(與配置jdk環境變量相同)

vim /etc/profile
#編輯mycat環境變量
export MYCAT_HOME=/home/apps/mycat
export PATH=$PATH:$MYCAT_HOME/bin

至此,mycat安裝完成。可是要使用mycat的分庫分表還須要配置幾個文件:

進入mycat目錄下的conf目錄:

  1.修改server.xml文件:

 

 

 2.修改schemas.xml文件:

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

    <!--
        schema:至關於mysql中的數據庫
        name:這個數據庫的名字
        checkSQLschema:檢查sql語句是否錯誤,默認爲false,不須要爲true,交給mysql來檢查就能夠了
        sqlMaxLimit:最大執行sql語句數量,能夠一次性執行的sql語句數量
    -->
    <schema name="TEACH" checkSQLschema="false" sqlMaxLimit="100">
        <!--
        至關於數據庫中的表,這個表並非真實存在的,而是經過mysql映射過來的,所以mysql中必定要存在與這個表的名字相同的表,這樣才能映射進來
        dataNode:數據節點,上一篇分析HDFS時,已經講過數據節點的概念,就是mysql數據庫,節點之間以,分隔
        rule:規則,使用mycat實現分庫分表有十大規則,也就是說怎樣實現分片,是把天天的數據都分一個片,仍是按照編號範圍,每100條數據分一塊...
            等等,具體十大分片規則,能夠單獨去看,這裏使用mod-long,輪詢的方式,第一條存mysql1,第2條存mysql2
        -->
        <table name="student" dataNode="dn1,dn2" rule="mod-long" />
    </schema>

    <!--數據節點:就是數據庫服務器節點
    name:節點的名字,與上面相對應,上面有幾個,下面就要有幾個
    dataHost:數據節點地址,與下面的dataHost標籤的名字向對應
    database:真實的數據庫名, mycat中的TEACH數據庫是虛擬的,它裏面的表都是經過真實的數據庫中的表映射進來的,這裏指的是mysql中的真實的數據庫
    -->
    <dataNode name="dn1" dataHost="localhost1" database="teach" />
    <dataNode name="dn2" dataHost="localhost2" database="teach" />

    <!--dataHost:真實的數據庫的節點地址信息
    name:給該節點起名字,經過dataNode引用該節點
    maxCon:最大鏈接數
    minCon:嘴小鏈接數
    balance:負載均衡(在獨寫分離中講解,這裏用不到)
    writeType:寫入方式(讀寫分離的配置,這裏用不到,下一篇講)
    dbType:數據庫類型,是mysql仍是oracle,redis...等等,原本mycat是隻支持mysql的,可是發展到如今支持多種數據庫
    dbDriver:數據庫驅動(使用本地驅動->mycat提供的驅動)
    switchType:切換方式,讀寫分離中講
    slaveThreshold:主從複製延時(讀寫分離的屬性,下篇講)-->
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <!--heartbeat:心跳,mycat一直檢測mysql的user表(心跳),當接收不到心跳時,就會認爲這臺mysql宕機了,就不會在對該節點作增刪改查等操做-->
        <heartbeat>select user()</heartbeat>

        <!--writeHost:寫節點,當獨立存在時,則該節點又讀又寫,當與readHost同時存在時,則表示只寫,不進行讀操做
            host屬性只是標識了該臺數據庫的操做的內容,能夠隨意定義,不能重複
        -->
        <writeHost host="write1" url="192.168.226.159:3306" user="root"
                   password="123456"/>
    </dataHost>

    <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>

        <writeHost host="write2" url="192.168.226.160:3306" user="root"
                   password="123456"/>
    </dataHost>

</mycat:schema>

3修改rule.xml

 

 

 由於本次只使用了mod-long規則,其餘的沒有使用,這裏count表示數據庫的dataNode節點總數

配置完畢,啓動mycat,由於配置了環境變量,能夠在任意地方執行命令:

mycat console

而後使用mysql鏈接mycat,此時若是真實的mysql數據中沒有數據庫及表時,沒法映射,所以mycat中的表會顯示不存在,須要在真實的mysql數據庫上建立表,而後經過mycat添加數據,能夠看到一條數據存入mysql1,一條數據存入mysql2的情形。

相關文章
相關標籤/搜索