1 总结:
1:用的表必须在mycat的配置文件中配置。
2:mycat默认分片策略中,都是针对表的主键,默认是id,如果主键不是id的,请去rule.xml自己复制一份修改
3:
2 注意细讲解
1:schema.xml中没有配置的表,用mycat创建表报错。
如下图:我在配置文件没有good3,所以用mycat创建会失败。
2 rule.xml 分片策略文件,若表的主键不是id,则要自己复制一个引用。
schema.xml数据库实例配置(默认都是主库读写 注意要改对应配置)
balance:只有主机,所有的 读写操作都是要在主机进行。要设置为0
双主双从的时候 设置为1
一主多从模式 设置为 3 .
switchType: 主从时要设置为 -1,否则将会把数据写入从库了。造成数据不一致。
3 实战分库----数据水平拆分
3.1每个库中所有表结构相同(一个mysql实例,但是创建三个库)
全部所有表的数据都会分在自己配置的库中, 但是底下是一个mysql中三个库。
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="mycatdb" checkSQLschema="true" sqlMaxLimit="100">
<!--table是逻辑表名 dataNode:来源于哪 ,rule:分片规则,auto-sharding-long 按id值划分规则 -->
<!-- 所有表数据均分到这三个库中 -->
<table name="good" dataNode="dn1,dn2,dn3" rule="sharding-by-murmur" />
<table name="item" dataNode="dn1,dn2,dn3" rule="sharding-by-murmur" />
<table name="order" dataNode="dn1,dn2,dn3" rule="sharding-by-murmur" />
</schema>
<!-- ,db1,db2,db3,真实的库 -->
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" />
<!-- 真实的mysql实例 -->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!--按照心跳机制来判断真实的数据库是否正常运行 -->
<heartbeat>select user()</heartbeat>
<!-- 主库-->
<writeHost host="hostM1" url="192.168.135.128:3306" user="root"
password="root">
<!-- 主从配置的从库,你要是没有就删除即可-->
<readHost host="hostS2" url="192.168.135.4:3306" user="root" password="xxx" />
</writeHost>
</dataHost>
</mycat:schema>
3.2 每个库中所有表结构相同(两个mysql实例)
- mycat逻辑库连接两个mysql实例
- 两个mysql都是db1的库,但是表的结构都是一样的。数据会按分片规则,插入到对应的实例中。
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="mycatdb" checkSQLschema="true" sqlMaxLimit="100">
<!--table是逻辑表名 dataNode:来源于哪 ,rule:分片规则,auto-sharding-long 按id值划分规则 -->
<!-- 所有表数据均分到这两个库中 -->
<table name="good" dataNode="dn1,dn2" rule="sharding-by-murmur" />
<table name="item" dataNode="dn1,dn2" rule="sharding-by-murmur" />
<table name="order" dataNode="dn1,dn2" rule="sharding-by-murmur" />
</schema>
<!-- ,db1,db2,真实的库 -->
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost2" database="db1" />
<!-- 真实的mysql实例 -->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!--按照心跳机制来判断真实的数据库是否正常运行 -->
<heartbeat>select user()</heartbeat>
<!-- 主库-->
<writeHost host="hostM1" url="192.168.135.128:3306" user="root"
password="root">
<!-- 主从配置的从库,你要是没有就删除即可-->
<readHost host="hostS2" url="192.168.135.4:3306" user="root" password="xxx" />
</writeHost>
</dataHost>
<!-- 真实的mysql实例 -->
<dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!--按照心跳机制来判断真实的数据库是否正常运行 -->
<heartbeat>select user()</heartbeat>
<!-- 主库-->
<writeHost host="hostM1" url="192.168.135.129:3306" user="root"
password="root">
<!-- 主从配置的从库,你要是没有就删除即可-->
<readHost host="hostS2" url="192.168.135.5:3306" user="root" password="xxx" />
</writeHost>
</dataHost>
</mycat:schema>
4 实战分库----数据业务拆分
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="mycatdb" checkSQLschema="true" sqlMaxLimit="100">
<!--table是逻辑表名 dataNode:来源于哪 ,rule:分片规则,auto-sharding-long 按id值划分规则 -->
<table name="t_brand" dataNode="goods"/>
<table name="t_spec" dataNode="goods"/>
<table name="t_item" dataNode="goods"/>
<table name="t_good" dataNode="goods"/>
<table name="t_good_desc" dataNode="goods"/>
<table name="t_content" dataNode="content"/>
<table name="t_content_category" dataNode="content"/>
<table name="t_order" dataNode="order1,order2" rule="sharding-by-murmur"/>
<table name="t_pay" dataNode="order1,order2" rule="sharding-by-murmur"/>
<table name="t_user" dataNode="user"/>
<table name="t_address" dataNode="user"/>
</schema>
<!-- goods-db,content-db,order1-db,order2-db,user-db,真实的库 -->
<dataNode name="goods" dataHost="localhost1" database="goods-db" />
<dataNode name="content" dataHost="localhost1" database="content-db" />
<dataNode name="order1" dataHost="localhost1" database="order1-db" />
<dataNode name="order2" dataHost="localhost1" database="order2-db" />
<dataNode name="user" dataHost="localhost1" database="user-db" />
<!-- 真实的mysql实例 -->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!--按照心跳机制来判断真实的数据库是否正常运行 -->
<heartbeat>select user()</heartbeat>
<!-- 主库-->
<writeHost host="hostM1" url="192.168.135.128:3306" user="root"
password="root">
<!-- 主从配置的从库,你要是没有就删除即可-->
<readHost host="hostS2" url="192.168.135.4:3306" user="root" password="xxx" />
</writeHost>
</dataHost>
</mycat:schema>
5 实战分库----一个库下某几个表水平拆分
在同一个库下,只有某几个表数据过大,想要拆分。