下載地址:http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/
我這裡以linux部署為例
scp Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz root@39.108.xxx.xxx:.usr/local
我這裡是命令上傳到linux伺服器目錄,大家也可以通過工具手工上傳,或者直接開啟linux用rz上傳
tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
新增使用者:adduser mycat
授權:chown mycat:mycat mycat/
編輯profile系統檔案
vim /etc/profile
檔案最後加入這兩行
MYCAT_HOME=/usr/local/mycat
export PATH=
P
A
T
H
:
PATH:
PATH:MYCAT_HOME/bin
cd /usr/local/mycat/conf
主要關注一下這三個設定:
rule.xml 主要是指定各個表的分片演演算法
schema.xml 設定多節點的資訊
server.xml mycat服務設定,賬號密碼設定
組態檔如下,有詳細說明
<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>
<?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>
這個檔案預設設定都可以直接使用,替換以下部分就行
<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>
mycat start
檢視啟動紀錄檔
vim wrapper.log
如果出現此錯誤,證明沒有java環境,安裝jdk,設定環境變數即可解決
啟動成功
ps -ef |grep ‘mycat’
接下來就可以像mysql一樣使用了,用法幾乎一樣,有少部分mysql語法不支援,不過不影響使用
命令連線mycat
剛好有一臺伺服器沒有裝mycat,我就寫了這篇部落格幫助大家瞭解和設定mycat;那麼看了之後,你學會了嗎?
原創不易,轉載請註明原文地址!