MyCat教程三:安裝及配置介紹

来源:https://www.cnblogs.com/cxydmx/archive/2019/10/24/11734073.html
-Advertisement-
Play Games

一、安裝MyCat 1.安裝準備環境 1.1 安裝JDK 因為MyCat是java開發的,所以需要java虛擬機環境,在Linux節點中安裝JDK是必須的。 1.2 放開相關埠 在主從節點上都放開對埠3306的訪問,或者直接關閉防火牆。 臨時關閉 service iptables stop se ...


一、安裝MyCat

1.安裝準備環境

1.1 安裝JDK

  因為MyCat是java開發的,所以需要java虛擬機環境,在Linux節點中安裝JDK是必須的。
在這裡插入圖片描述

1.2 放開相關埠

  在主從節點上都放開對埠3306的訪問,或者直接關閉防火牆

# 臨時關閉
service iptables stop
service iptables start
# 永久關閉
chkconfig iptables on
chkconfig iptables off
# 查看防火牆狀態
service iptables status

1.3 root賬號

  MyCat是我們的資料庫中間件,那麼MyCat必然要能夠訪問對應的主從資料庫,所以在主從資料庫中我們需要分別創建訪問的賬號。

grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;

2.安裝MyCat

2.1 下載安裝軟體

官網地址:http://www.mycat.io/

在這裡插入圖片描述

2.2 上傳解壓安裝

  將下載的文件上傳到/usr/local目錄下,並解壓

在這裡插入圖片描述

2.3 目錄介紹

  解壓後的目錄結構如下:

在這裡插入圖片描述

目錄 描述
bin 目錄里是啟動腳本
conf 目錄里是配置文件
catlet 為 MyCat 的一個擴展功能
lib 目錄里是 MyCat 和它的依賴 jar
logs 目錄里是 console.log 用來保存控制台日誌,和 MyCat.log 用來保存 MyCat 的 log4j日誌

二、相關配置文件介紹

  MyCat的架構其實很好理解,MyCat是代理,MyCat後面就是物理資料庫。和Web伺服器的 Nginx類似。對於使用者來說,訪問的都是 MyCat,不會接觸到後端的資料庫。

在這裡插入圖片描述

註意:MyCat的主要配置文件都在conf目錄下。我們給大家來介紹下介個核心的配置文件

配置文件 說明
server.xml MyCat 的配置文件,設置賬號、參數等
schema.xml MyCat 對應的物理資料庫和資料庫表的配置
rule.xml MyCat 分片(分庫分表)規則

2.1 server.xml

  server.xml是用來配置賬號,參數及相關操作許可權的文件,下麵是給文件的簡要內容,去掉了相關的註釋

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
    <system>
        <property name="useSqlStat">0</property> 
        <property name="useGlobleTableCheck">0</property>  
        <property name="sequnceHandlerType">2</property>
        <property name="processorBufferPoolType">0</property>
        <property name="handleDistributedTransactions">0</property>
        <property name="useOffHeapForMerge">1</property>
        <property name="memoryPageSize">1m</property>
        <property name="spillsFileBufferSize">1k</property>
        <property name="useStreamOutput">0</property>
        <property name="systemReserveMemorySize">384m</property>
        <property name="useZKSwitch">true</property>
    </system>
    <!-- 全局SQL防火牆設置 -->
    <!-- 
    <firewall> 
       <whitehost>
          <host host="127.0.0.1" user="mycat"/>
          <host host="127.0.0.2" user="mycat"/>
       </whitehost>
       <blacklist check="false">
       </blacklist>
    </firewall>
    -->   
    <user name="root">
        <property name="password">123456</property>
        <property name="schemas">TESTDB</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="user">
        <property name="password">user</property>
        <property name="schemas">TESTDB</property>
        <property name="readOnly">true</property>
    </user>
</mycat:server>

system標簽中設置的是系統級別的相關參數,參考源文件中的註釋即可能看懂,初始預設即可
user標簽是我們要註意的地方。MyCat 中的用戶,用戶可以訪問的邏輯庫,可以訪問的邏輯表,服務的埠號等
說明:上面的預設的配置表示 創建的有兩個用戶rootuser賬號
  root 賬號,密碼是123456,對應的邏輯庫是 TESTDB
  user 賬號,密碼是user,對應的邏輯庫是 TESTDB,許可權是只讀

註釋掉的privileges 表示root用戶的操作許可權

參數 說明 事例
dml insert,update,select,delete 0000

dml 許可權順序為:insert(新增),update(修改),select(查詢),delete(刪除),0000–> 1111,0 為禁止許可權,1 為開啟許可權

2.2 schema.xml

  schema.xml 是最主要的配置文件,首先看預設的配置文件

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
        <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
        <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
        <table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
        <table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3" rule="mod-long" />
        <table name="employee" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile" />
        <table name="customer" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile">
            <childTable name="orders" primaryKey="ID" joinKey="customer_id" parentKey="id">
                <childTable name="order_items" joinKey="order_id" parentKey="id" />
            </childTable>
            <childTable name="customer_addr" primaryKey="ID" joinKey="customer_id" parentKey="id" />
        </table>
    </schema>
    <dataNode name="dn1" dataHost="localhost1" database="db1" />
    <dataNode name="dn2" dataHost="localhost1" database="db2" />
    <dataNode name="dn3" dataHost="localhost1" database="db3" />
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="localhost:3306" user="root"
                   password="123456">
            <readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />
        </writeHost>
        <writeHost host="hostS1" url="localhost:3316" user="root"
                   password="123456" />
    </dataHost>
</MyCat:schema>

2.2.1 主要節點介紹

  在配置文件中可以定義讀寫分離,邏輯庫,邏輯表,dataHost,dataNode 等信息.

節點 描述
schema 配置邏輯庫,name 與 server.xml 中 schema 對應
dataNode 定義數據節點的標簽,也就是分庫相關配置
dataHost 物理資料庫,真正存儲數據的資料庫

2.2.2 節點及相關屬性介紹

2.2.2.1 schema

屬性name

邏輯庫名稱

屬性checkSQLschema

是否檢測 SQL 語法中的 schema 信息. 如: MyCat邏輯庫名稱 A, dataNode 名稱 B
SQL : select * from A.table;
checkSQLschema 值是 true, MyCat發送到資料庫的 SQL 是 select * from table;
checkSQLschema 只是 false,MyCat發送的資料庫的 SQL 是 select * from A.table;

屬性sqlMaxLimit

MyCat 在執行 SQL 的時候,如果 SQL 語句中沒有 limit 子句.自動增加 limit 子句. 避免一次
性得到過多的數據,影響效率. limit子句的限制數量預設配置為100.如果 SQL中有具體的 limit
子句,當前屬性失效.
SQL : select * from table . MyCat解析後: select * from table limit 100
SQL : select * from table limit 10 . MyCat 不做任何操作修改.

標簽 table

定義邏輯表的標簽

屬性 name

邏輯表名

屬性 dataNode

數據節點名稱. 即物理資料庫中的 database 名稱.多個名稱使用逗號分隔.

屬性 rule

分片規則名稱.具體的規則名稱參考 rule.xml 配置文件.

2.2.2.2 dataNode

屬性 name

數據節點名稱, 是定義的邏輯名稱,對應具體的物理資料庫 database

屬性 dataHost

引用 dataHost 標簽的 name 值,代表使用的物理資料庫所在位置和配置信息.

屬性 database

在 dataHost 物理機中,具體的物理資料庫 database 名稱.

2.2.2.3 dataHost

屬性 name

定義邏輯上的數據主機名稱

屬性 maxCon/minCon

最大連接數, max connections
最小連接數, min connections

屬性 dbType

資料庫類型 : mysql 資料庫

屬性 dbDriver

資料庫驅動類型, native,使用 MyCat提供的本地驅動.

    dataHost 子標簽 writeHost

    寫數據的資料庫定義標簽. 實現讀寫分離操作.
    

    屬性 host

    資料庫命名
    

    屬性 url

    資料庫訪問路徑
    

    屬性 user

    資料庫訪問用戶名
    

    屬性 password

    訪問用戶密碼
    

    writeHost 子標簽 readHost
    屬性 host

    資料庫命名
    

    屬性 url

    資料庫訪問路徑
    

    屬性 user

    資料庫訪問用戶名
    

    2.3 rule.xml

      用於定義分片規則的配置文件。mycat 預設的分片規則: 以 500 萬為單位,實現分片規則.邏輯庫 A 對應 dataNode - db1 和 db2. 1-500 萬保存在 db1 中, 500 萬零 1 到 1000 萬保存在 db2 中,1000 萬零 1 到 1500 萬保存在 db1 中.依次類推.

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
        - you may not use this file except in compliance with the License. - You 
        may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
        - - Unless required by applicable law or agreed to in writing, software - 
        distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
        WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
        License for the specific language governing permissions and - limitations 
        under the License. -->
    <!DOCTYPE mycat:rule SYSTEM "rule.dtd">
    <mycat:rule xmlns:mycat="http://io.mycat/">
        <tableRule name="rule1">
            <rule>
                <columns>id</columns>
                <algorithm>func1</algorithm>
            </rule>
        </tableRule>
        <tableRule name="rule2">
            <rule>
                <columns>user_id</columns>
                <algorithm>func1</algorithm>
            </rule>
        </tableRule>
        <tableRule name="sharding-by-intfile">
            <rule>
                <columns>sharding_id</columns>
                <algorithm>hash-int</algorithm>
            </rule>
        </tableRule>
        <tableRule name="auto-sharding-long">
            <rule>
                <columns>id</columns>
                <algorithm>rang-long</algorithm>
            </rule>
        </tableRule>
        <tableRule name="mod-long">
            <rule>
                <columns>id</columns>
                <algorithm>mod-long</algorithm>
            </rule>
        </tableRule>
        <tableRule name="sharding-by-murmur">
            <rule>
                <columns>id</columns>
                <algorithm>murmur</algorithm>
            </rule>
        </tableRule>
        <tableRule name="crc32slot">
            <rule>
                <columns>id</columns>
                <algorithm>crc32slot</algorithm>
            </rule>
        </tableRule>
        <tableRule name="sharding-by-month">
            <rule>
                <columns>create_time</columns>
                <algorithm>partbymonth</algorithm>
            </rule>
        </tableRule>
        <tableRule name="latest-month-calldate">
            <rule>
                <columns>calldate</columns>
                <algorithm>latestMonth</algorithm>
            </rule>
        </tableRule>
        <tableRule name="auto-sharding-rang-mod">
            <rule>
                <columns>id</columns>
                <algorithm>rang-mod</algorithm>
            </rule>
        </tableRule>  
        <tableRule name="jch">
            <rule>
                <columns>id</columns>
                <algorithm>jump-consistent-hash</algorithm>
            </rule>
        </tableRule>
        <function name="murmur"
            class="io.mycat.route.function.PartitionByMurmurHash">
            <property name="seed">0</property><!-- 預設是0 -->
            <property name="count">2</property>
                  
    您的分享是我們最大的動力!

    -Advertisement-
    Play Games
    更多相關文章
    • 以msm8909為例,高通的主要文件有幾個: qpnp linear charger.c(線性充電器) qpnp vm bms.c(BMS管理) power_supply_core.c(power_supply對外部提供對應介面) 其中,vm_bus的power_supply一般為struct po ...
    • 1、終端無法輸入中文的原因(未實踐) 原文地址 2、Windows10下VMwarm(V15.5)和ubuntu14.04實現複製文件(已經實踐) 轉載路徑 ...
    • 一、安裝編譯工具及庫文件 zlib庫:zlib庫是ngx_http_gzip_module(gzip壓縮模塊)所必需的openssl庫 :--with-http_ssl_module使用該模塊必需裝openssl庫,來實現http支持https協議 二、安裝pcre庫prce庫:--with-htt ...
    • 完全卸載gitlab 1.停止gitlab # gitlab-ctl stop 2.卸載gitlab(看是gitlab-ce版本還是gitlab-ee版本) # rpm -e gitlab-ce 3.查看gitlab進程 # ps aux | grep gitlab 4.殺掉第一個進程 # kill ...
    • Editor: Veagau Time: 2019/10/17 [TOC] 一、PyTorch虛擬環境配置 該部分操作均在終端(terminal)命令行中執行,在桌面右擊滑鼠新建terminal即可。 若系統已經安裝Anaconda,則可以跳過第一步(檢驗方法:命令行執行conda list,有返回 ...
    • 在軟體實施過程中,也許會有這樣的問題: 表中數據出現非預期的結果,此時不確定是程式問題,哪個程式,存儲過程,觸發器.. 或還是人為修改的結果,此時可以用觸發器對特定的表欄位做跟蹤監視,記錄每次新增,修改,刪除此欄位值的操作詳細信息(含登錄名,主機名,IP地址,執行的TSQL語句,程式名等等), 以利 ...
    • 在這篇筆記中,我不僅記錄了自己如何完成按某個欄位的取值範圍進行統計的需求,既有早期的硬編碼風格,也有升級版的語句。我還分享了自己如何看待初學編程時的笨拙代碼,如何應對一個難題接著一個難題的編程自學過程。希望我的筆記,帶給你啟發和力量。 ...
    • 1.資料庫:是一個長期存儲在電腦內的、有組織的、有共用的、統一管理的數據集合。它是一個按數據結構來存儲的和管理數據的電腦軟體系統,即資料庫包含兩層含義:保管數據的“倉庫”,以及數據管理的方法和技術。 2.資料庫的特點:實現數據共用,減少數據冗餘;採用特定的數據類型;具有較高的數據獨立性;具有統一 ...
    一周排行
      -Advertisement-
      Play Games
    • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
    • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
    • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
    • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
    • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
    • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
    • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
    • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
    • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
    • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...