前置条件:
分库分表的测试Mycat版本换成1.6.5-release;
mycat只支持的mysql的版本是5.5和5.6,因此高版本很多不支持;
测试过程中遇到的问题:
1. 使用单库分表测试,比如把t_user表分为10张表,在配置文件schema.xml中,已经配置了:
也配置好了sequence_db_conf.properties和rule.xml文件,依然启动失败,报dataNode个数与规则分片个数不一致问题:
table [ T_BET_ORDER ] rule function [ mod-long ] partition size : 10 > table datanode size : 1, please make sure table datanode size = function partition size
经过检查,是因为使用的是mycat-1.6-release版本,换成1.6.5-release版本就可以了。
2. 程序可以启动成功,但是插入数据时,报告,no table sequence NollPointException异常错误:
是因为配置了主键生成方式但是没有在sequence_db_conf.properties文件中标注大写的表明=dataNode名称。
3. 启动程序链接mycat但是出现表不存在的问题,导致应用程序无法启动:
是因为没有在sequence_db_conf.properties文件中标注大写的表明=dataNode名称或者没有在配置文件schema.xml中,
配置dataNode="dn1"导致无法扫描到表。
4. 启动mycat失败,查看日志出现的一些问题:
可能是注解不完整,或者某些标签缺少必要的属性导致启动失败。
5. 在分库分表当中,单库只需根据id均衡分表就可以了,但是需要提前创建好表使用subTables="t_user$1-10"标注好,配置好rule.xml文件,在多库分表中可能需要分库进行创建,这时候只需要创建好数据库,使用多个dataNode节点就可以了,比如根据时间分表。
这种根据时间分库分表的前提是使用mycat-1.6.5-release进行切分,而mycat-1.6-release不支持,即使通过日志提示配置多个dataNode和分片数量保持一致,只想同一个database,在插入数据时,还会出问题,报bad insert sql sharding column:ID not provided这个错误,所以如果需要使用id均分的话,不能使用mycat-1.6-release版本。
6. mycat1.6-release可以做根据时间分库分表,例如t_bet_order表根据指定字段分3个表,因为这种分表必须分库所有分为3个库:
具体配置:
schema.xml
rule.xml
BET_TIME
sharding-by-date
yyyy-MM-dd
2018-07-01
10
注:不要在schema 标签中添加 primaryKey="ID" autoIncrement="true" 否则会插入很慢