目录
第一章:mysql的主从复制之一主一从
第二章:mysql的主从复制之双主双从
第三章:mycat实现数据库的读写分离
第四章:mycat实现mysql分库(垂直切分)
第五章:mycat实现mysql分库(水平切分)
第六章:mycat ER表与全局表
第七章:mycat全局序列号
mycat实现mysql分库(水平切分)
前置条件:
继续基于前面第四章配置的mysql和mycat进行配置。
配置mycat
- 修改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" dataNode="dn1">
<!--配置表名为test的表dataNode自动路由到dn1和dn2的数据库中,多个通过逗号隔开
rule:指定rule.xml文件的数据路由规则名称
-->
<table name = "test" dataNode="dn1,dn2" rule="mod-long"></table>
</schema>
<dataNode name="dn1" dataHost="host1" database="duck"/>
<dataNode name="dn2" dataHost="host2" database="duck"/>
<dataHost name="host1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.1.106:3306" user="root" password="123456">
<readHost host="hostS1" url="192.168.1.107:3306" user="root" password="123456"></readHost>
</writeHost>
</dataHost>
<dataHost name="host2" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM2" url="192.168.1.108:3306" user="root" password="123456">
<readHost host="hostS2" url="192.168.1.109:3306" user="root" password="123456"></readHost>
</writeHost>
</dataHost>
</mycat:schema>
- 修改rule.xml文件,指定数据路由的规则
这个配置文件中有很多预置规则,你没必要删除掉。我这里只是写一个我引用的策略处理讲解。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
<!--配置一个规则
name:规则名称
columns:数据分片的字段
algorithm:指定使用的算法的引用,实现为function 标签内容。
-->
<tableRule name="mod-long">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<!--配置一个分片算法
name:算法名称
class:指定算法的实现类,这里指定了一个简单的取模算法
-->
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- 有多少个数据分片库 -->
<property name="count">2</property>
</function>
</mycat:rule>
启动mycat的服务
mycat console
登录mycat
mysql -uroot -p123456 -h 192.168.85.111 -P8066
验证分库是否生效
在node01和node03上分别创建一张test表。
create table test(id int,name varchar(32));
插入几条数据,观察数据是否根据id%2来插入到node01或node03中。这里需要注意:values 前面的(id,name)不能省略,就算是全字段也不能省略。
insert into test(id,name) values(1,'zs');
insert into test(id,name) values(2,'ls');
insert into test(id,name) values(3,'ww');
insert into test(id,name) values(4,'xm');
登录node01查看是否插入了id为2和4的两条数据。
登录node03查看是否插入了id为2和4的两条数据。