(實戰)mycat的安裝設定和使用(包含詳細說明)

2020-10-19 15:00:34

Mycat安裝

1. 下載

下載地址:http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/
我這裡以linux部署為例

2. 上傳安裝包

scp Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz root@39.108.xxx.xxx:.usr/local
在這裡插入圖片描述
我這裡是命令上傳到linux伺服器目錄,大家也可以通過工具手工上傳,或者直接開啟linux用rz上傳

3. 解壓

tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
在這裡插入圖片描述

4. mycat目錄所有權授權給mycat使用者

新增使用者:adduser mycat
授權:chown mycat:mycat mycat/

5. 設定環境變數

編輯profile系統檔案
vim /etc/profile
檔案最後加入這兩行
MYCAT_HOME=/usr/local/mycat
export PATH= P A T H : PATH: PATH:MYCAT_HOME/bin

6. Mycat設定

cd /usr/local/mycat/conf
主要關注一下這三個設定:
在這裡插入圖片描述
rule.xml 主要是指定各個表的分片演演算法
schema.xml 設定多節點的資訊
server.xml mycat服務設定,賬號密碼設定

schema.xml

組態檔如下,有詳細說明

<mycat:schema xmlns:mycat="http://io.mycat/">

    <!-- scchema名稱就是DB名稱,dataNode指定當前表的資料節點,和下面的dataNode name必須一致
         rule是分片的規則,我是自己重新定義在rule設定中的crc32slot演演算法,大家可以使用rule.xml現有的分片演演算法,部分演演算法對節點的個數有要求,會導致報錯,啟動注意檢視紀錄檔,或者提前看下演演算法函數-->
    <schema name="et_activity_db" checkSQLschema="true" sqlMaxLimit="100">
        <table name="et_app_t" dataNode="dn1-1,dn2-1" rule="fixedSlot_et_app_t"/>
        <table name="et_handler_t" dataNode="dn1-1,dn2-1" rule="fixedSlot_et_handler_t" primaryKey="id" />
        <table name="et_task_t" dataNode="dn1-1,dn2-1" rule="fixedSlot_et_task_t" primaryKey="id"/>
    </schema>
    <schema name="mysql" checkSQLschema="true" sqlMaxLimit="100">
        <table name="user" dataNode="dn1-2,dn2-2" rule="auto-sharding-long"/>
    </schema>

    <!-- 多節點定義,dataHost指定資料來源設定,和下面的dataHost name必須保持一致
    	database必須在資料來源中存在,否則啟動會報錯-->
    <dataNode name="dn1-1" dataHost="pzx" database="db1"/>
    <dataNode name="dn1-2" dataHost="pzx" database="db2"/>
    <dataNode name="dn2-1" dataHost="pzx" database="db1-1"/>
    <dataNode name="dn2-2" dataHost="pzx" database="db2-1"/>

    <!--資料來源可以設定多個-->
    <dataHost name="pzx" maxCon="1000" minCon="10" balance="0"
                  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
         <heartbeat>select user()</heartbeat>
         <!-- can have multi write hosts -->
         <writeHost host="hostM1" url="47.110.80.98:3306" user="root"
                            password="sxl7216000>">
                 <!-- can have multi read hosts -->
                 <!-- <readHost host="hostS2" url="192.168.1.200:3306" user="guest" password="123456>" /> -->
         </writeHost>
         <!-- <writeHost host="hostS1" url="localhost:3316" user="root"
                                                 password="123456" /> -->
         <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
    </dataHost>
</mycat:schema>

rule.xml

<?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="fixedSlot_et_app_t">
        <rule>
            <columns>app_id</columns>
            <algorithm>crc32slot</algorithm>
        </rule>
    </tableRule>
    <tableRule name="fixedSlot_et_handler_t">
        <rule>
            <!--指定用於計算分片的欄位,這樣子相同task_id的資料會分配到同一個分片-->
            <columns>task_id</columns>
            <algorithm>crc32slot</algorithm>
        </rule>
    </tableRule>
    <tableRule name="fixedSlot_et_task_t">
        <rule>
            <columns>instance_id</columns>
            <algorithm>crc32slot</algorithm>
        </rule>
    </tableRule>

    <tableRule name="auto-sharding-long">
           <rule>
                    <columns>id</columns>
                    <algorithm>rang-long</algorithm>
            </rule>
    </tableRule>

   <function name="crc32slot"
                    class="io.mycat.route.function.PartitionByCRC32PreSlot">
           <property name="count">2</property><!-- 要分片的資料庫節點數量,必須指定,否則沒法分片 -->
   </function>
   <function name="rang-long"
                      class="io.mycat.route.function.AutoPartitionByLong">
            <property name="mapFile">autopartition-long.txt</property>
    </function>
</mycat:rule>

server.xml

這個檔案預設設定都可以直接使用,替換以下部分就行

<user name="root" defaultAccount="true">
                <property name="password">123456</property>
                <property name="schemas">et_activity_db,mysql</property>
                <property name="defaultSchema">et_activity_db</property>
                <!--No MyCAT Database selected 錯誤前會嘗試使用該schema作為schema,不設定則為null,報錯 -->

                <!-- 表級 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">et_activity_db</property>
                <property name="readOnly">true</property>
        </user>

7. 啟動Mycat

mycat start
在這裡插入圖片描述
檢視啟動紀錄檔
vim wrapper.log
如果出現此錯誤,證明沒有java環境,安裝jdk,設定環境變數即可解決
在這裡插入圖片描述
啟動成功
在這裡插入圖片描述
ps -ef |grep ‘mycat’
在這裡插入圖片描述
接下來就可以像mysql一樣使用了,用法幾乎一樣,有少部分mysql語法不支援,不過不影響使用
在這裡插入圖片描述
命令連線mycat
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201018134140825.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzIyNTgxMw==,size_16,color_FFFF
剛好有一臺伺服器沒有裝mycat,我就寫了這篇部落格幫助大家瞭解和設定mycat;那麼看了之後,你學會了嗎?

原創不易,轉載請註明原文地址