一.基础配置
1.配置mycat/conf/schema.xml文件如下所示:
--注:
1)balance:指定读负载均衡类型,可用值如下:
0:不开启读写分离,所有读操作都发送到当前可用writeHost。
1:所有readHost和stand by writeHost参与读操作的负载均衡。
2:所有读操作随机分发到writeHost、readHost。
3:所有读操作随机分发到writeHost对应的readHost,writeHost不负担读压力。
2)writeType:指定写负载均衡类型,可用值如下:
0:所有写操作发送到配置的第一个writeHost,当第一个writeHost宕机时,切换到第二个writeHost,重新启动后以切换后的为准,切换记录于配置文件dnindex.properties。
1:所有写操作随发送到配置的writeHost。
2:尚未实现
3)switchType:指定切换方式,可用值如下:
-1:不自动切换。
1:自动切换(默认)。
2:根据mysql主从同步状态决定是否切换。
二.读写分离
1.配置mycat/conf/schema.xml文件如下所示:
--注:
1)设置dataHost属性balance=3,实现读写分离;如设置balance=2,则writeHost与ReadHost共同分担读负载。
2)通过命令启动mycat:/usr/local/mycat/bin/mycat console
三.垂直分片(分库)
垂直分片就是将多张表分别存储于不同的mysql实例中进行管理和使用,其具体实现方法和步骤如下所示:
1.在多个不同mysql实例(10.1.1.13:3306:test_db1和10.1.1.14:3306:test_db2)中创建多张表。
2.配置/mycat/conf/schema.xml文件如下所示:
3.配置mycat/conf/server.xml文件如下所示:
<property name="schemas">test_db1,test_db2</property>
4.通过如下命令启动mycat:/usr/local/mycat/bin/mycat console
四.全局表
全局表可用作数据字典表,其在所有mysql实例数据库中存在,但mycat中,只是一个逻辑数据库的数据表,当对mycat中该表进行变更操作时,该表相应所有mysql实例数据库中的表都会发生相应变更,其具体实现方法和步骤如下所示:
1.在多个mysql实例中分别建立相同的数据字典表。
2.配置mycat/conf/schema.xml文件如下所示:
4.配置mycat/conf/server.xml文件如下所示:
<property name="schemas">db_test1,db_test2,db_test</property>
5.通过如下命令启动mycat:/usr/local/mycat/bin/mycat console
6.此时只要对mycat中db_test库中的表t_test进行更新,其对应所有mysql实例数据库中的t_test表都会更新,相应地,mycat其他数据库(db_test1,db_test2)中的t_test表也都会更新。
五.水平分片(分库)
1.常用水平分片
水平分片是将一个数据量庞大的数据表通过水平拆分,分别将部分数据存储于不同mysql实例数据库,mycat分片规则配置文件为/usr/local/mycat/conf/rule.xml,目前常用分片规则有:
1)求模分库:mod-long。
2)范围分库:auto-sharding-long。
3)Hash分库:hash-int。
4)月分库:sharding-by-month。
5)ER模型分库:childTable。
6)自定义分库:CustomRule(该规则需自己实现分库算法)。
2.分片规则
编辑配置分片规则文件mycat/conf/rule.xml。
3.求模分片(分库)
1)配置rule.xml文件如下所示:
2)配置schema.xml文件如下所示:
3)配置server.xml文件如下所示:
<property name="schemas">TESTDB</property>
4)通过如下命令启动mycat服务:/usr/local/mycat/bin/mycat console
5)通过如下命令连接mycat:mysql -uroot -p123456 -h10.1.1.10 -P8066 -Ddb_test
6)序列配置在usr/local/mycat/conf/sequence_conf.properties文件中,还需配置server.xml文件如下所示:
<property name="sequenceHandlerType">0</property>
此外,SQL中用next value for mycat_seq1表示序列增长,例如:
insert into t_test(c1,c2) values(next value for mycat_seq1,'test');
4.范围分片(分库)
1)配置rule.xml文件如下所示:
2)定义范围分库规则文件/usr/local/mycat/conf/partition-long.txt如下所示:
0-10000=0
10001-20000=1
20001-30000=2
3)配置schema.xml文件如下所示:
<table name="data" primaryKey="id" dataNode="dn1,dn2,dn3" rule="my-auto-sharding-long"/>
5.Hash分片(分库)
1)配置rule.xml文件如下所示:
2)定义hash分库规则文件/usr/local/mycat/conf/partition-hash-int.txt如下所示:
3)配置schema.xml文件如下所示:
<table name="t_test1" primaryKey="id" dataNode="dn1,dn2,dn3" rule="my-by-intfile"/>
5.按月分片(分库)
1)配置rule.xml文件如下所示:
2)配置schema.xml文件如下所示:
6.E-R模型分片(分库)
所谓E-R模型分片,就是根据数据库E-R模型对多表进行父子关联分库存储和管理。
1)配置schema.xml文件如下所示: