Mycat分佈式數據庫中間件 what why how

目錄

What is Mycat?

1.概念?

2. 同類產品?

3. 解決了什麼問題?

4.如何解決的? 拆分

5. 拆分策略

6.拆分帶來的問題及如何解決 

 How to use Mycat?

 mycat中的核心概念及配置文件分析

 1.schema.xml

2. rule.xml

3.server.xml

Demo 

小結


What is Mycat?

1.概念?

Mycat 是數據庫中間件,就是介於數據庫與應用之間,進行數據處理與交互的中間服務。 

2. 同類產品?

 mycat、TDDL、Sharding-JDBC、cobar

3. 解決了什麼問題?

 超大容量問題

性能問題

多租戶問題:多租戶技術也叫多重租憑技術,就是在確保用戶間數據隔離的前提下實現在多用戶環境中共用相同系統或程序等軟硬件資源的一種軟件架構技術。

4.如何解決的? 拆分

 

5. 拆分策略

 

 

6.拆分帶來的問題及如何解決 

 

 How to use Mycat?

 mycat中的核心概念及配置文件分析

 1.schema.xml

     涵蓋了MyCat的邏輯庫、表、分片規則、分片節點及數據源。

    邏輯表(邏輯數據庫中的表)

 配置文件標籤的含義

 

 

2. rule.xml

  定義的各種分片規則

3.server.xml

  server.xml 包含mycat的系統配置信息,它有兩個標籤,分別是user和system,掌握system標籤的各項配置屬性是mycat調優的關鍵。

Demo 

 我們現在做一個主從、讀寫分離,簡單分表的示例。

服務器 IP 說明
Mycat 192.168.0.2 mycat服務器,連接數據庫時,連接此服務器
database1 192.168.0.3 物理數據庫1,真正存儲數據的數據庫
database2 192.168.0.4 物理數據庫2,真正存儲數據的數據庫

Mycat作爲主數據庫中間件,肯定是與代碼弱關聯的,所以代碼是不用修改的,使用Mycat後,連接數據庫是不變的,默認端口是8066。連接方式和普通數據庫一樣,如:jdbc:mysql://192.168.0.2:8066/ 

server.xml示例

<user name="test">
        <property name="password">test</property>  
        <property name="schemas">lunch</property>  
        <property name="readOnly">false</property>  
        
        <!-- 表級 DML 權限設置 -->
        <!--        
        <privileges check="false">
            <schema name="TESTDB" dml="0110" >
                <table name="tb01" dml="0000"></table>
                <table name="tb02" dml="1111"></table>
            </schema>
        </privileges>       
         -->
    </user>

重點關注下面這段,其他默認即可。

參數 說明
user 用戶配置節點
--name 登錄的用戶名,也就是連接Mycat的用戶名
--password 登錄的密碼,也就是連接Mycat的密碼
--schemas 數據庫名,這裏會和schema.xml中的配置關聯,多個用逗號分開,例如需要這個用戶需要管理兩個數據庫db1,db2,則配置db1,dbs
--privileges 配置用戶針對表的增刪改查的權限,具體見文檔吧

 我這裏配置了一個賬號test 密碼也是test,針對數據庫lunch,讀寫權限都有,沒有針對表做任何特殊的權限。

schema.xml:schema.xml是最主要的配置項,首先看我的配置文件。

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

<!-- 數據庫配置,與server.xml中的數據庫對應 -->
    <schema name="lunch" checkSQLschema="false" sqlMaxLimit="100">
        <table name="lunchmenu" dataNode="dn1"  />
        <table name="restaurant" dataNode="dn1"  />
        <table name="userlunch" dataNode="dn1"  />
        <table name="users" dataNode="dn1"  />
        <table name="dictionary" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2"  rule="mod-long" />

        
    </schema>

<!-- 分片配置 -->
    <dataNode name="dn1" dataHost="test1" database="lunch" />
    <dataNode name="dn2" dataHost="test2" database="lunch" />

<!-- 物理數據庫配置 -->
    <dataHost name="test1" maxCon="1000" minCon="10" balance="0"  writeType="0" dbType="mysql" dbDriver="native">
        <heartbeat>select user();</heartbeat>
        <writeHost host="hostM1" url="192.168.0.2:3306" user="root" password="123456">  
        </writeHost>
    </dataHost>

    <dataHost name="test2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
        <heartbeat>select user();</heartbeat>
        <writeHost host="hostS1" url="192.168.0.3:3306" user="root" password="123456">  
        </writeHost>
    </dataHost>

</mycat:schema>

 

參數 說明
schema 數據庫設置,此數據庫爲邏輯數據庫,name與server.xml中schema對應
dataNode 分片信息,也就是分庫相關配置
dataHost 物理數據庫,真正存儲數據的數據庫

每個節點的屬性逐一說明:

schema:

屬性 說明
name 邏輯數據庫名,與server.xml中的schema對應
checkSQLschema 數據庫前綴相關設置,建議看文檔,這裏暫時設爲false
sqlMaxLimit select 時默認的limit,避免查詢全表

table:

屬性 說明
name 表名,物理數據庫中表名
dataNode 表存儲到哪些節點,多個節點用逗號分隔。節點爲下文dataNode設置的name
primaryKey 主鍵字段名,自動生成主鍵時需要設置
autoIncrement 是否自增
rule 分片規則名,具體規則下文rule詳細介紹

dataNode

屬性 說明
name 節點名,與table中dataNode對應
datahost 物理數據庫名,與datahost中name對應
database 物理數據庫中數據庫名

dataHost

屬性 說明
name 物理數據庫名,與dataNode中dataHost對應
balance 均衡負載的方式
writeType 寫入方式
dbType 數據庫類型
heartbeat 心跳檢測語句,注意語句結尾的分號要加。

小結

 小編建議,理論不能脫離實踐,要去切身的體驗不斷地提高才可!

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