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 实战分库----一个库下某几个表水平拆分
在同一个库下,只有某几个表数据过大,想要拆分。