MyCat 分庫表,可以使用 join 語句

MyCat 分庫表

此教程使用的是單表分兩庫

目錄

MyCat 分庫表

ー:下載

二:修改 server.xml    MyCat 服務級別的配置

三:修改 schema.xml 邏輯庫的配置 主要配置的是邏輯庫,邏輯表,數據節點,和實際數據源之間的關係

四:修改 rule.xml

五:修改 MySQL 數據庫

六:測試


ー:下載


目前只有 1.6.5版本 以上支持單庫分表。

下載,解壓使用即可。

解壓後,修改配置文件,在 mycat/conf

 

二:修改 server.xml    MyCat 服務級別的配置


MyCat 的配置文件,設置賬號、參數等.

<!-- mycat的8066 端口連接的用戶名,密碼,邏輯數據庫名 -->
<user name="lsq" defaultAccount="true">
        <property name="password">123456</property>
        <property name="schemas">mydb</property>
</user>

設置 user namepasswordschemas; 主要做的功能就是 邏輯庫與用戶 做映射。

namepassword 在連接代理數據庫 MyCat 時使用;

schemas 是邏輯庫,要和 schema.xml 裏的 schema name 對應。

 

三:修改 schema.xml 邏輯庫的配置 主要配置的是邏輯庫,邏輯表,數據節點,和實際數據源之間的關係


mycat 邏輯數據庫、表的映射關係

mysql 數據節點、所屬物理數據庫的映射關係。

 

Mycat 對應的物理數據庫和數據庫表的配置

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

    <schema name="mydb" checkSQLschema="true" sqlMaxLimit="100">
        <table name="lsqtable" primaryKey="id" autoIncrement="true" dataNode="dn$1-2" rule="mod-long" />
        <!-- <table name="jointable" primaryKey="id" type="global" dataNode="dn$1-2" autoIncrement="true"  /> -->
    </schema>

    <dataNode name="dn1" dataHost="localhost1" database="mydb" />
    <dataNode name="dn2" dataHost="localhost2" database="mydb" />

    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"  maxRetryCount="4">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="192.168.85.128:3306" user="root" password="***">
        </writeHost>
    </dataHost>

    <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"  maxRetryCount="4">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="192.168.85.130:3306" user="root" password="***">
        </writeHost>
    </dataHost>
    
</mycat:schema>

schema name 要和 server.xml 對應上,既多個用戶擁有對該邏輯庫的權限。

<schema name="mydb">

city 設置分表三張,單庫多表只能設置一個 datanoterule 採用取模模式 mod-long 取模分片。

<table name="lsqtable" primaryKey="id" autoIncrement="true" dataNode="dn$1-2" rule="mod-long" />

writeHostreadHost 設爲同一數據庫。

 

四:修改 rule.xml


MyCat 分片(分庫分表)規則,mod-long 取模分片  取模列爲 id 取模算法爲 mod-long

<tableRule name="mod-long">
    <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>

此次選用默認的 mod-long 規則,只需修改 count 數.

修改 property count 等於 2

這樣,配置已經完成。

 

五:修改 MySQL 數據庫


先在 MySQL 庫上,建 2 張表,lsqtable 。


                                


啓動 Mycat

啓動:
./mycat start


查看啓動狀態:
./mycat status


停止:
./mycat stop


重啓(改變上面的 xml 配置不用重啓,管理端可以重新載入):
./mycat restart


查看 logs/ 下的 wrapper.log 和 mycat.log 可以查看運行時問題和異常。
mycat 啓動日誌:
cat ./logs/wrapper.log

mycat 應用日誌:
cat ./logs/mycat.log

 

六:測試


mysql 創建 mydb 數據庫,兩個數據源分別創建 lsqtable

連接 mycat, 端口:8066,賬號:lsq, 密碼:123456                // 對應 server 表中的 user 標籤

執行 sql 語句,查看執行過程。

 

EXPLAIN

insert into lsqtable(id, l, s, q) VALUES (1, 'l1', 's1', 'q1')

可以分析 update 語句,或者 select 語句,可知偶數的 id 都被路由到了第一個庫,奇數的 id 都被路由到了第二個庫,因爲 datanode1 作爲第一個節點 0,datanode2 作爲第二個節點 1。使用除留餘數法,偶數的餘數都爲 0,而奇數的餘數都爲 1。打開 mysql 中的 mydb 數據庫 lsqtable 表可看到數據:



可查看執行過程路由到物理表 dn1 庫所在表上:

explain SELECT * FROM lsqtable WHERE id = 3

datanode    sql
dn2         SELECT * FROM lsqtable WHERE id = 3

3 % 2 = 1 會路由到 1 的節點。dn2 xml 配置中屬於 1 的節點。從 0 開始

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章