項目中的表數據量過千萬,考慮分庫分表,這里是調研mycat的筆記
安裝
- 依賴
- jdk
安裝java環境 - mysql
mysql5.6 - 系統
centos7
- jdk
- 安裝
下載
到官網下載,解壓到mycat目錄配置server.xml
config/server.xml
中配置root用戶和user用戶的密碼及數據庫schema-
配置schema.xml
config/schema.xml
中配置<schema name="mycat" checkSQLschema="true" sqlMaxLimit="100"> <!-- auto sharding by id (long) --> <table name="user" dataNode="dn1,dn2" primaryKey="id" autoIncrement="true" rule="auto-sharding-long" /> <!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="lamycat-month-calldate" /> --> </schema>
上邊這段配置表user分兩個node存儲,使用的規則是
auto-sharding-long
,且使用的id自增<!-- 分片配置 --> <dataNode name="dn1" dataHost="mycat1" database="mycat" /> <dataNode name="dn2" dataHost="mycat2" database="mycat" /> <!-- 物理數據庫配置 --> <dataHost name="mycat1" 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="172.16.194.132:3306" user="root" password="abc123"> </writeHost> <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> --> </dataHost> <dataHost name="mycat2" 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="hostS1" url="172.16.194.1:3306" user="root" password="abc123"> </writeHost> <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> --> </dataHost>
這一段配置兩個分片的連接信息,每一個分片包含一個dataNode配置和一個dataHost配置,dataHost配置分片的連接信息
-
配置分片規則
<tableRule name="auto-sharding-long"> <rule> <columns>id</columns> <algorithm>rang-long</algorithm> </rule> </tableRule> <function name="rang-long" class="io.mycat.route.function.AutoPartitionByLong"> <property name="mapFile">autopartition-long.txt</property> </function>
在
config/rule.xml
中看到,'auto-sharding-long'根據id分片,使用的算法是'rang-long'
同樣在config/rule.xml
中,看到'rang-long'在'autopartition-long.txt'配置規則# range start-end ,data node index # K=1000,M=10000. 0-1K=0 1K-100K=1
上邊配置的規則為,id小于等于1000的存入第一個node分片,id大于1000,小于等于100000的,存入第二個node分片(分片在之前的schema.xml中配置)
啟動
- 啟動
執行命令bin/mycat
即可啟動mycat,在log中監控是否成功啟動 - 問題
- 內存問題
# There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 357892096 bytes for committing reserved memory.
free -h
查看發現機器內存不足,清理之后即可成功啟動。- 插入時報錯,無法自增id
修改server.xml
中,取消注釋
這個配置sequnceHandlerType=0表示,自增的id存儲到本地文件中,另外可以配置到數據庫(sequnceHandlerType=1)、本地時間戳方式(sequnceHandlerType=2),可以自行查找怎么配置<property name="sequnceHandlerType">0</property>
在sequence_conf.properties
中,可以配置當前表自增id從多少開始,最高到多少,以及當前到多少USER.MAXID=20000 USER.CURID=0 USER.MINID=0
- mycat啟動默認端口號為8066,只需要將項目連接信息,改為連接8066即可