3.server.xml
server.xml配置文件包含了mycat的系统配置信息,主要有两个重要的标签:system,user、
1.system标签
对应的系统配置项及其含义,参考资料
2.user标签
priviege权限设置字段: dml='0000'=增 改 查 删 0为关闭,1为开启
5.mycat分片
1.垂直分表
场景:
在业务系统中,涉及以下表结构,但是由于用户与订单每天都会产生大量的数据,单台服务器的数据存储及处理能力是有限的,可以对数据库进行拆分,原有的数据库表如下。
流程:
- 分别在三台MySQL中创建数据库(shopping)
- 修改schema.xml
- 修改server.xml
- 测试:创建表,插入数据
- schema.xml内容:
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="SHOPPING" checkSQLschema="true" sqlMaxLimit="100"> <table name="tb_goods_base" dataNode="dn1" primaryKey="id"/> <table name="tb_goods_brand" dataNode="dn1" primaryKey="id"/> <table name="tb_goods_cat" dataNode="dn1" primaryKey="id"/> <table name="tb_goods_desc" dataNode="dn1" primaryKey="goods_id"/> <table name="tb_goods_item" dataNode="dn1" primaryKey="id"/> <table name="tb_order_item" dataNode="dn1,dn2,dn3" primaryKey="id" type="global"/> <table name="tb_order_master" dataNode="dn1,dn2,dn3" primaryKey="order_id" type="global"/> <table name="tb_order_pay_log" dataNode="dn2" primaryKey="out_trade_no"/> <table name="tb_user" dataNode="dn3" primaryKey="id"/> <table name="tb_user_address" dataNode="dn3" primaryKey="id"/> <table name="tb_areas_provinces" dataNode="dn3" primaryKey="id"/> <table name="tb_areas_city" dataNode="dn3" primaryKey="id"/> <table name="tb_areas_region" dataNode="dn3" primaryKey="id"/> </schema> <dataNode name="dn1" dataHost="dhost1" database="shopping" /> <dataNode name="dn2" dataHost="dhost2" database="shopping" /> <dataNode name="dn3" dataHost="dhost3" database="shopping" /> <dataHost name="dhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="master" url="jdbc:mysql://192.168.2.1:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="1234.Com" /> </dataHost> <dataHost name="dhost2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="master" url="jdbc:mysql://192.168.2.2:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="1234.Com" /> </dataHost> <dataHost name="dhost3" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="master" url="jdbc:mysql://192.168.2.3:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="1234.Com" /> </dataHost> </mycat:schema>
server.xml内容
<user name="root" defaultAccount="true"> <property name="password">123456</property> <property name="schemas">SHOPPING</property> </user>
2.水平分表
在业务系统中,有一张(日志表),业务系统每天都会产生大量的日志数据,单台服务器的数据存储及处理能力是有限的,可以对数据库表进行拆分。
对tb_log表进行拆分
1.schema.xml配置
<schema name="ITCAST" checkSQLschema="true" sqlMaxLimit="100"> <table name="tb_log" dataNode="dn4,dn5,dn6" primaryKey="id" rule="mod-long"/> </schema> <dataNode name="dn4" dataHost="dhost1" database="itcast" /> <dataNode name="dn5" dataHost="dhost2" database="itcast" /> <dataNode name="dn6" dataHost="dhost3" database="itcast" />
2.server.xml的配置
<user name="root" defaultAccount="true"> <property name="password">123456</property> <property name="schemas">SHOPPING,ITCAST</property> </user>
6.分片规则
1.范围分片
根据指定的字段及其配置的范围与数据节点的对应情况,来决定该数据属于哪一个分片
自定义分片范围
2.取模分片
根据指定的字段值与节点数量进行求模运算,根据运算结构,来决定该数据属于哪个分片。
取模分片配置
3.一致性hash
所谓一致性哈希,相同的哈希因子计算值总是被划分到相同的分区表中,不会因为分区节点的增加而改变原来的数据的分区位置。
一致性hash配置
通过在配置文件中配置可能的枚举值,指定数据分布到不同数据节点上,本规则适用于按照省份,性别,状态拆分数据等业务。
枚举分片配置