1 找到conf/schema.xml并备份
2 配置虚拟表table[在schema里面]
其中 sharding-by-intfile
为rule.xml中的规则
规则文件为conf文件夹中的partition-hash-int.txt
3 配置数据节点dataNode
现在数据库新建3个数据库,skywalking,skywalking1,skywalking2。
name:节点名称
dataHost:主机名
database:数据库名
4 配置节点主机dataHost
dataHost属性说明
(1)name
唯一标识dataHost 标签,供上层的标签使用。
(2)maxCon
指定每个读写实例连接池的最大连接。也就是说,标签内嵌套的 writeHost、readHost 标签都会使用这个属性的值来实例化出连接池的最大连接数。
(3)minCon
指定每个读写实例连接池的最小连接,初始化连接池的大小。
(4)balance
负载均衡类型,目前的取值有 3 种:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
2. balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
3. balance="2",所有读操作都随机的在 writeHost、readhost 上分发。
4. balance="3",所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。
(5)writeType
负载均衡类型,目前的取值有 3 种:
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
2. writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。switchType 属性
- -1 表示不自动切换
- 1 默认值,自动切换
- 2 基于 MySQL 主从同步的状态决定是否切换
(6)dbType
指定后端连接的数据库类型,目前支持二进制的 mysql 协议,还有其他使用 JDBC 连接的数据库。例如:mongodb、oracle、spark 等。
(7)dbDriver
指定连接后端数据库使用的 Driver,目前可选的值有 native 和 JDBC。使用 native 的话,因为这个值执行的是二进制的 mysql 协议,所以可以使用 mysql 和 maridb。其他类型的数据库则需要使用 JDBC 驱动来支持。
从 1.6 版本开始支持 postgresql 的 native 原始协议。
如果使用 JDBC 的话需要将符合 JDBC 4 标准的驱动 JAR 包放到 MYCAT\lib 目录下,并检查驱动 JAR 包中包括如下目录结构的文件:META-INF\services\java.sql.Driver。在这个文件内写上具体的 Driver 类名,例如:com.mysql.jdbc.Driver。
5 修改conf/partition-hash-int.txt
用于分库规则,其中10000,10010,10020对应的是规则中的sharding_id
skywalking对应10000,skywalking1对应10010,skywalking对应10020。
数据在插入的时候需要携带相应的sharding_id。
设置完成以后,重启mycat
6 在SQLyog新建表格
使用SQLyog连接mycat建立数据库表。
Create TABLE sys_user (id INT PRIMARY KEY,username VARCHAR(20) NOT NULL,address VARCHAR(20),sharding_id INT
)
执行插入语句
INSERT INTO sys_user(id,username,address,sharding_id) VALUES(1,'熊帅','南京',10000)
由于sharding_id为10000,则插入到skywalking数据库。
查看执行计划
EXPLAIN INSERT INTO sys_user(id,username,address,sharding_id) VALUES(1,'熊帅','南京',10000)
注意:
如果插入时候,不带规则需要的字段,会报错,如下: