MyCat水平分库
使用MyCat的最重要一点就是可以进行良好的水平分库的处理机制,所谓的水平分库指的是可以将数据均衡的存储在不同的子数据库之中,如果要采用水平分库读写分离机制依然需要,所以只配置一个读写分离机制,其他的操作都使用单数据库的方式来完成。
1. 在所有的mysql数据上执行新的数据库脚本:
DROP DATABASE IF EXISTS yootk ; CREATE DATABASE yootk CHARACTER SET UTF8 ; use yootk ; CREATE TABLE member( mid VARCHAR(50) , name VARCHAR(50), CONSTRAINT pk_mid PRIMARY KEY(mid) ) ;
2. 如果要进行水平分库,那么最重要的就是需要进行分库规则的定义,修改rule.xml配置文件定义规则:
》打开配置文件:vim /usr/local/mycat/conf/rule.xml
》定义规则和算法:
# 规则
<tableRule name="member-mid-murmur"> <rule> <columns>mid</columns> <algorithm>member-murmur</algorithm> </rule> </tableRule> # 算法 <function name="member-murmur" class="io.mycat.route.function.PartitionByMurmurHash"> <property name="seed">0</property> <property name="count">3</property> <property name="virtualBucketTimes">160</property> </function>
3. 修改schema配置文件:vim /usr/local/mycat/conf/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="info" primaryKey="id" dataNode="dna,dnb,dnc" rule="info-mod-long"/> </schema> <dataNode name="dna" dataHost="localhost1" database="yootk" /> <dataNode name="dnb" dataHost="localhost2" database="yootk" /> <dataNode name="dnc" dataHost="localhost3" database="yootk" /> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="2" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.168.195.148:3306" user="root" password="mysqladmin"> <readHost host="hostS2" url="192.168.195.149:3306" user="root" password="mysqladmin" /> </writeHost> </dataHost> <dataHost name="localhost2" maxCon="1000" minCon="10" balance="2" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.168.195.150:3306" user="root" password="mysqladmin"/> </dataHost> <dataHost name="localhost3" maxCon="1000" minCon="10" balance="2" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.168.195.151:3306" user="root" password="mysqladmin"/> </dataHost> </mycat:schema>
4. 修改server.xml配置文件,取消无用的逻辑数据库定义:vim /usr/local/mycat/conf/server.xml
<property name="schemas">TESTDB</property>
5. 重新启动当前的mycat服务:/usr/local/mycat/bin/mycat restart
6. 登录MyCat数据操作平台,进行数据操作:mysql -uroot -p123456 -P8066 -DTESTDB -h127.0.0.1
7. 向数据库之中进行数据的存储:
insert into info (id,title) VALUES (1,@@hostname) ; insert into info (id,title) VALUES (2,@@hostname) ; insert into info (id,title) VALUES (3,@@hostname) ; insert into info (id,title) VALUES (4,@@hostname) ; insert into info (id,title) VALUES (5,@@hostname) ;
此时数据库中的内容被平均的分散到不同的数据库里面,这个时候就实现了数据库的水平分割,re这种水平分割,可以实现非常良好的负载均衡效果,水平分割在结果读写分离机制,可以极大的改善数据库的操作性能;