1.先决条件是mycat已经安装,并且在mycat主机上有安装mysql(无需启动),可以远程使用用户进行其他数据库的连接.
注解:在进行数据分片的时候底层数据库是无法做到主从复制的.(因为分片跟数据复制是冲突的.分片是将数据分隔然后分别保存到一台
数据库服务器上),
 
2.分片修改schema.xml配置文件进行数据库分片设计.设计多个数据库,设计多个表分区.schema中可以指定多个datanode.但是内个dn都是单独使用的.不能一个dn既做虚拟数据库又做分库分表.
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="testdb" checkSQLschema="ture" sqlMaxLimit="100"  dataNode="dn1">
<table name="teacher" dataNode="dn1,dn2" rule="sharding-by-intfile">
#如果多个表进行表分区可以填写多行.相应的分片规则也要进行修改.
#table属性依托于schema name,是上下级从属关系.一个库可以将多个表进行分片.
#这里遇到的坑是在配置文件中配置的分片数量大于后端服务器的数量.这里是dn1,dn2,
</table>
</schema>
<schema name="testdb3" checkSQLschema="ture" sqlMaxLimit="100"  dataNode="dn3">
#这里遇到坑是在这里配置好了.但是在server.xml文件中没有修改正确.修改方式参见下面小黑框.
</schema>
<dataNode name="dn1" dataHost="node1" database="course" />
#配置文件中有多少dataNode就指定多少dataNode,不能多指定或者少指定.指定过多要在
<dataNode name="dn2" dataHost="node2" database="course" />
<dataNode name="dn3" dataHost="node3" database="teacher" />
<dataHost name="node1" maxCon="1000" minCon="30" balance="1"  writeType="0" dbType="mysql" dbDriver="native" switchType="1">
#给dn1标签添加属性信息.其中的数据库读写,宕机转移等都会在这里配置.(这里仅仅配置的是分片功能,
#如果读写分离功能的话需要有写入数据库的从属关系.)
<heartbeat>select user()</heartbeat>
#指定心跳检查
        <writeHost host="master1" url="192.168.15.21:3306" user="root"  password="mysql">
</writeHost>
</dataHost>
#上面的都是dn1的相关属性信息.
<dataHost name="node2" maxCon="1000" minCon="30" balance="1"  writeType="0" dbType="mysql" dbDriver="native" switchType="1">
<heartbeat>select user()</heartbeat>
        <writeHost host="master2" url="192.168.15.22:3306" user="root"  password="mysql">
</writeHost>
</dataHost>
<dataHost name="node3" maxCon="1000" minCon="30" balance="1"  writeType="0" dbType="mysql" dbDriver="native" switchType="1">
<heartbeat>select user()</heartbeat>
        <writeHost host="slave1" url="192.168.15.23:3306" user="root"  password="mysql">
</writeHost>
</dataHost>
</mycat:schema>
2.server.xml配置
这个配置文件配置相对简单.只要找到相应的连接用户,然后分配相应的读写权限以及添加好相应的虚拟数据库即可.这里
天机的是testdb3虚拟数据库,后面对应关系是在schema.xml中体现.这里dn3对应的是teacher数据库.
        <user name="root" defaultAccount="true">
                <property name="password">mysql</property>
                <property name="schemas">testdb,testdb3</property>
        </user>
#上面的配置表示mycat对外的连接用户为root 密码是mysql,可以管理的虚拟数据库是testdb,和testdb3数据库.
#这里遇到的坑.在添加多个数据表库操作的时候新和成两行独立的配置.这里写成一条就可以.
3.rule配置文件
schema.xml配置文件中指定了rule的分片规则.这里需要配置rule.xml配置文件进行指定.分片字段依据
        <tableRule name="sharding-by-intfile">
                <rule>
                        <columns>province</columns>
                        <algorithm>hash-int</algorithm>
                </rule>
        </tableRule>
#表示分片名字是sharding-by-intfile,这个是要与schema.xml中rule标签一致.
#columes 指定分片字段.
#下面指定分片算法(默认即可)
在同一个配置文件中,根据hash-int 查找下面对应的函数.
        <function name="hash-int"
                class="io.mycat.route.function.PartitionByFileMap">
                <property name="mapFile">partition-hash-int.txt</property>
        </function>
#这里查找到的是partition-hash-int.txt 配置文件.在配置文件中添加分片规则即可.
4.partition-hash-int.txt配置文件
1=0
2=1
#这里因为在scheme.xml文件中已经指定2个分片.那么这里就之只能制定两个分片0/1.对应前面的范围可以是多个.
#但是最终都要分配到0/1两个分片上.切记要与schema.xml进行对应.这里遇到了一个坑.
然后就可以重启mycat 查看进程或者日志进行生效了.
5.全局表设置,以及读写分离下的配置,
全局表中就是在原有的逻辑库上添加相应的global表属性
<table name="t_glo"  primaryKey="id" dataNode="dn1,dn2,dn3" type = "global">
#其中 一般情况下primarykey可以在table标签中使用,并非只是全局表.作用是mycat生成缓存.加速查询加速.但是前提是添加where条件进行
指定,这个是需要再表中有的字段.一般情况最好是辨识度高的字段.
posted on 2019-09-24 19:08  DisCover_ry  阅读(803)  评论(0)    收藏  举报