Mycat-server-1.6.7.4-test-20191022231753-linux.tar 1.6.7.4更新

86 阅读4分钟

Mycat-server-1.6.7.4-test-20191022231753-linux.tar 1.6.7.4更新
1.为sql监控添加来源主机ip
2.当switchType == 2同时心跳条件为Last_SQL_Error is empty, and Slave_SQL_Running is Yes, 和Seconds_Behind_Master is NULL才进行切换
3.当jdbc连接关闭时,如果连接状态autocommit=false,则执行回滚
4.jdbc在切换schema的时候会尝试使用setSchema函数
5.mongodb连接字符串的用户名密码可以从属性配置中获取
6.支持通过表指定schema路由到名称相同的datanode
(当sql中存在schema.table语法时,在无法路由sql的时候,会尝试使用根据table获取该表上唯一一个DataNode,
然后把schema与dataNode匹配,如果匹配成功则把该值作为DataNode路由)
7.对于以前随机路由的SQL,允许使用 randomDataNode="dn1"强制指定节点
(<schema name="scott" checkSQLschema="false" sqlMaxLimit="100" randomDataNode="dn1">)
8.bug修复:oracle 语法不支持 drop index i_t_f on t_test,只有drop index i_t_f;因此,当在mycat执行drop index i_t_f on t_test,送oracle后端,on 语句应该去掉。
9.修复调用mysql存储过程(mp.csdn.net/postedit/10…
10.mycat1.6.74调用Oracle存储过程返回一行(mp.csdn.net/postedit/10…
11.mycat1.6.74调用Oracle存储过程返回结果集(mp.csdn.net/postedit/10…
12.修复 oracle 存储过程返回值不能是null的问题
13.修复sql中带有schema.table且不移除schema的情况下,无法单值路由
14. OOM时守护线程不能挂,以保证OOM恢复后能继续提供服务
15.show direct memory display error---统一样式,用空格代替tab
16.支持自定义全局序列号处理类,并提供http全局序列号请求实现(mp.csdn.net/postedit/10…
17.添加按自然日分区算法
18.单库分表下SELECT t.id FROM tr t LEFT JOIN t1 ON t.id =   t1.id WHERE t.id IN (1,2)
tr是逻辑表,mycat会替换此逻辑表,而sql其他部分不处理
19.jdbc返回自增主键
按自然日分区
<tableRule name="sharding-by-date">
<rule>
<columns>createTime</columns>
<algorithm>partbyday</algorithm>
</rule>
</tableRule>
<function name="partbyday"
class="io.mycat.route.function.PartitionByDate">
<property name="dateFormat">yyyy-MM-dd</property>
<property name="sNaturalDay">0</property>
<property name="sBeginDate">2014-01-01</property>
<property name="sEndDate">2014-01-31</property>
<property name="sPartionDay">10</property>
</function>

//测试默认1
partition.setDateFormat("yyyy-MM-dd");
partition.setsBeginDate("2014-01-01");
partition.setsEndDate("2014-01-31");
partition.setsPartionDay("1");
partition.init();
Assert.assertEquals(true, 0 == partition.calculate("2014-01-01"));
Assert.assertEquals(true, 9 == partition.calculate("2014-01-10"));
Assert.assertEquals(true, 10 == partition.calculate("2014-01-11"));
Assert.assertEquals(true, 0 == partition.calculate("2014-02-01"));
System.out.println(partition.calculate("2014-02-19"));


//自然日测试
//1、只开启自然日分表开关
PartitionByDate partition2=new PartitionByDate();
partition2.setDateFormat("yyyy-MM-dd");
partition2.setsNaturalDay("1");
partition2.init();
//Assert.assertEquals(true, 6 == partition2.calculate("2014-01-20"));
Assert.assertEquals(true, 19 == partition2.calculate("2014-01-20"));
Assert.assertEquals(true, 0 == partition2.calculate("2014-03-01"));
Assert.assertEquals(true, 30 == partition2.calculate("2018-03-31"));


//2、顺便开启开始时间
partition2.setDateFormat("yyyy-MM-dd");
partition2.setsNaturalDay("1");
partition2.setsPartionDay("1");
partition2.setsBeginDate("2014-01-02");
partition2.init();

        Assert.assertEquals(true, 19 == partition2.calculate("2014-01-20"));
Assert.assertEquals(true, 0 == partition2.calculate("2014-03-01"));
Assert.assertEquals(true, 30 == partition2.calculate("2018-03-31"));

        //2、顺便开启开始时间,结束时间不足28天(开启自然日失败,默认间隔模式)PartionDay=1
PartitionByDate partition3=new PartitionByDate();
partition3.setDateFormat("yyyy-MM-dd");
partition3.setsNaturalDay("1");
partition3.setsPartionDay("1");
partition3.setsBeginDate("2014-01-02");
partition3.setsEndDate("2014-01-20");
partition3.init();
Assert.assertEquals(true, 0 == partition3.calculate("2014-01-02"));
Assert.assertEquals(true, 1 == partition3.calculate("2014-01-03"));
Assert.assertEquals(true, 2 == partition3.calculate("2014-01-04"));
Assert.assertEquals(true, 6 == partition3.calculate("2014-01-08"));
Assert.assertEquals(true, 8 == partition3.calculate("2014-01-10"));
Assert.assertEquals(true, 12 == partition3.calculate("2014-01-14"));
Assert.assertEquals(true, 18 == partition3.calculate("2014-01-20"));
System.out.println(partition3.calculate("2014-03-01"));
//Assert.assertEquals(true, 0 == partition3.calculate("2014-03-01"));

        //3、顺便开启开始时间,结束时间不足28天(开启自然日失败,默认间隔模式)PartionDay=10 恢复间隔模式
partition.setsNaturalDay("1");
partition.setsBeginDate("2014-01-01");
partition.setsEndDate("2014-01-24");
partition.setsPartionDay("10");
partition.init();
Assert.assertEquals(true, 0 == partition.calculate("2014-01-01"));
Assert.assertEquals(true, 0 == partition.calculate("2014-01-10"));
Assert.assertEquals(true, 0 == partition.calculate("2014-01-05"));
Assert.assertEquals(true, 1 == partition.calculate("2014-01-20"));
System.out.println("------------success!----");


//4、顺便开启开始时间,结束时间超过29天 PartionDay=1
partition.setsNaturalDay("1");
partition.setsBeginDate("2014-01-01");
partition.setsEndDate("2014-01-29");
partition.setsPartionDay("10");
partition.init();
Assert.assertEquals(true, 0 == partition.calculate("2014-01-01"));
Assert.assertEquals(true, 9 == partition.calculate("2014-01-10"));
Assert.assertEquals(true, 4 == partition.calculate("2014-01-05"));
Assert.assertEquals(true, 19 == partition.calculate("2014-01-20"));
Assert.assertEquals(true, 30 == partition.calculate("2018-01-31"));


//4、顺便开启开始时间,结束时间超过29天 PartionDay=1
partition.setsNaturalDay("1");
partition.setsBeginDate("2014-01-01");
partition.setsEndDate("2018-01-29");
partition.setsPartionDay("1");
partition.init();
Assert.assertEquals(true, 0 == partition.calculate("2014-01-01"));
Assert.assertEquals(true, 9 == partition.calculate("2014-01-10"));
Assert.assertEquals(true, 4 == partition.calculate("2014-01-05"));
Assert.assertEquals(true, 19 == partition.calculate("2014-01-20"));
Assert.assertEquals(true, 30 == partition.calculate("2018-01-31"));