下載: https://github.com/MyCATApache/Mycat-download 安裝: 直接解壓 運行命令: linux: ./mycat start 啟動 ./mycat stop 停止 ./mycat console 前臺運行 ./mycat restart 重啟服務 ./m ...
下載:
https://github.com/MyCATApache/Mycat-download
安裝:
直接解壓
運行命令:
linux:
./mycat start 啟動
./mycat stop 停止
./mycat console 前臺運行
./mycat restart 重啟服務
./mycat pause 暫停
./mycat status 查看啟動狀態
windows:
點擊startup_nowrap.bat
配置:
打開conf/wrapper.conf文件。以下配置跟jvm參數完全一致,可以根據自己的jvm參數調整。
Java Additional Parameters
wrapper.java.additional.1=
wrapper.java.additional.1=-DMYCAT_HOME=.
wrapper.java.additional.2=-server
wrapper.java.additional.3=-XX:MaxPermSize=64M
wrapper.java.additional.4=-XX:+AggressiveOpts
wrapper.java.additional.5=-XX:MaxDirectMemorySize=100m
wrapper.java.additional.6=-Dcom.sun.management.jmxremote
wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=1984
wrapper.java.additional.8=-Dcom.sun.management.jmxremote.authenticate=false
wrapper.java.additional.9=-Dcom.sun.management.jmxremote.ssl=false
wrapper.java.additional.10=-Xmx100m
wrapper.java.additional.11=-Xms100m
wrapper.java.additional.12=-XX:+UseParNewGC
wrapper.java.additional.13=-XX:+UseConcMarkSweepGC
wrapper.java.additional.14=-XX:+UseCMSCompactAtFullCollection
wrapper.java.additional.15=-XX:CMSFullGCsBeforeCompaction=0
wrapper.java.additional.16=-XX:CMSInitiatingOccupancyFraction=70
Mycat連接測試:
測試mycat與測試mysql完全一致,mysql怎麼連接,mycat就怎麼連接。
推薦先採用命令行測試:
mysql -uroot -proot -P8066 -h127.0.0.1
如果採用工具連接,1.4,1.3目前部分工具無法連接,會提示database not selected,建議採用高版本,navicat測試。1.5已經修複了部分工具連接。
Mycat配置入門
配置:
–bin 啟動目錄
–conf 配置文件存放配置文件
邏輯庫配置:
配置server.xml
添加兩個mycat邏輯庫:user,pay: system 參數是所有的mycat參數配置,比如添加解析器:defaultSqlParser,其他類推 user 是用戶參數。
<system> <property name="defaultSqlParser">druidparser</property> </system> <user name="mycat"> <property name="password">mycat</property> <property name="schemas">user,pay</property> </user>
編輯schema.xml
修改dataHost和schema對應的連接信息,user,pay 垂直切分後的配置如下所示:
schema 是實際邏輯庫的配置,user,pay分別對應兩個邏輯庫,多個schema代表多個邏輯庫。
dataNode是邏輯庫對應的分片,如果配置多個分片只需要多個dataNode即可。
dataHost是實際的物理庫配置地址,可以配置多主主從等其他配置,多個dataHost代表分片對應的物理庫地址,下麵的writeHost、readHost代表該分片是否配置多寫,主從,讀寫分離等高級特性。
以下例子配置了兩個writeHost為主從。
<schema name="user" checkSQLschema="false" sqlMaxLimit="100" dataNode="user" /> <schema name="pay" checkSQLschema="false" sqlMaxLimit="100" dataNode="pay" > <table name="order" dataNode="pay1,pay2" rule="rule1"/> </schema> <dataNode name="user" dataHost="host" database="user" /> <dataNode name="pay1" dataHost="host" database="pay1" /> <dataNode name="pay2" dataHost="host" database="pay2" /> <dataHost name="host" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native"> <heartbeat>select 1</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="192.168.0.2:3306" user="root" password="root" /> <writeHost host="hostM2" url="192.168.0.3:3306" user="root" password="root" /> </dataHost>
Mycat邏輯庫、系統參數配置
配置Mycat環境參數
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server xmlns:mycat="http://org.opencloudb/"> <system> <property name="defaultSqlParser">druidparser</property> </system> </mycat:server>
如例子中配置的所有的Mycat參數變數都是配置在server.xml 文件中,system標簽下配置所有的參數,如果需要配置某個變數添加相應的配置即可,例如添加啟動埠8066,預設為8066。
<property name="serverPort">8066</property>
1
其他所有變數類似。
配置Mycat邏輯庫與用戶
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server xmlns:mycat="http://org.opencloudb/"> <user name="mycat"> <property name="password">mycat</property> <property name="schemas">TESTDB</property> </user> </mycat:server>
如例子中配置的所有的Mycat連接的用戶與邏輯庫映射都是配置在server.xml 文件中,user標簽下配置所有的參數,例如例子中配置了一個mycat用戶供應用連接到mycat,同時mycat 在schema.xml中配置後了一個邏輯庫TESTDB,配置好邏輯庫與用戶的映射關係。
邏輯庫、表分片配置
配置邏輯庫(schema)
Mycat作為一個中間件,實現mysql協議那麼對前端應用連接來說就是一個資料庫,也就有資料庫的配置,mycat的資料庫配置是在schema.xml中配置,配置好後映射到server.xml裡面的用戶就可以了。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://org.opencloudb/"> <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"> <table name="t_user" dataNode="dn1,dn2" rule="sharding-by-mod2"/> <table name="ht_jy_login_log" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-date_jylog"/> </schema> <dataNode name="dn1" dataHost="localhost1" database="mycat_node1"/> <dataNode name="dn2" dataHost="localhost1" database="mycat_node2"/> <dataHost name="localhost1" writeType="0" switchType="1" slaveThreshold="100" balance="1" dbType="mysql" maxCon="10" minCon="1" dbDriver="native"> <heartbeat>show status like 'wsrep%'</heartbeat> <writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="root" > </writeHost> </dataHost> </mycat:schema >
上面例子配置了一個邏輯庫TESTDB,同時配置了t_user,ht_jy_login_log兩個分片表。
邏輯表配置
<table name="t_user" dataNode="dn1,dn2" rule="sharding-by-mod2"/>
table 標簽 是邏輯表的配置 其中
name代表表名,
dataNode代表表對應的分片,
Mycat預設採用分庫方式,也就是一個表映射到不同的庫上,
rule代表表要採用的數據切分方式,名稱對應到rule.xml中的對應配置,如果要分片必須配置。
配置分片(dataNode)
<dataNode name="dn1" dataHost="localhost1" database="mycat_node1"/> <dataNode name="dn2" dataHost="localhost1" database="mycat_node2"/>
表切分後需要配置映射到哪幾個資料庫中,Mycat的分片實際上就是庫的別名,例如上面例子配置了兩個分片dn1,dn2 分別對應到物理機映射dataHost localhost1 的兩個庫上。
配置物理庫分片映射(dataHost)
<dataHost name="localhost1" writeType="0" switchType="1" slaveThreshold="100" balance="1" dbType="mysql" maxCon="10" minCon="1" dbDriver="native"> <heartbeat>show status like 'wsrep%'</heartbeat> <writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="root" > </writeHost> </dataHost>
Mycat作為資料庫代理需要邏輯庫,邏輯用戶,表切分後需要配置分片,分片也就需要映射到真實的物理主機上,至於是映射到一臺還是一臺的多個實例上,Mycat並不關心,只需要配置好映射即可,例如例子中:
配置了一個名為localhost1的物理主機(dataHost)映射。
heartbeat 標簽代表Mycat需要對物理庫心跳檢測的語句,正常情況下生產案例可能配置主從,或者多寫 或者單庫,無論哪種情況Mycat都需要維持到資料庫的數據源連接,因此需要定時檢查後端連接可以性,心跳語句就是來作為心跳檢測。
writeHost 此標簽代表 一個邏輯主機(dataHost)對應的後端的物理主機映射,例如例子中寫庫hostM1 映射到127.0.0.1:3306。如果後端需要做讀寫分離或者多寫 或者主從則通過配置 多個writeHost 或者readHost即可。
Mycat 表切分規則配置
表切分規則
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mycat:rule SYSTEM "rule.dtd"> <mycat:rule xmlns:mycat="http://org.opencloudb/"> <tableRule name="sharding-by-hour"> <rule> <columns>createTime</columns> <algorithm>sharding-by-hour</algorithm> </rule> </tableRule> <function name="sharding-by-hour" class="org.opencloudb.route.function.LatestMonthPartion"> <property name="splitOneDay">24</property> </function> </mycat:rule >
數據切分中作為表切分規則中最重要的配置,表的切分方式決定了數據切分後的性能好壞,因此也是最重要的配置。
如上面例子配置了一個切分規則,名為sharding-by-hour 對應的切分方式(function )是按日期切分,該配置中:
tableRule
name 為schema.xml 中table 標簽中對應的 rule=”sharding-by-hour” ,也就是配置表的分片規則,
columns 是表的切分欄位: createTime 創建日期。
algorithm 是規則對應的切分規則:映射到function 的name。
function
function 配置是分片規則的配置。
name 為切分規則的名稱,名字人員取,但是需要與tableRule 中匹配。
class 是切分規則對應的切分類,寫死,需要哪種規則則配置哪種,例如本例子是按小時分片:org.opencloudb.route.function.LatestMonthPartion
property 標簽是切分規則對應的不同屬性,不同的切分規則配置不同。