Mycat之find no Route:SELECT * FROM `db1`.`t_gaojs` LIMIT 0
错误原因竟然是:DruidSelectParser类中的tryRoute方法
1、后台报错,前台竟然可以查询出数据
2017-03-01 20:37:59,312 [WARN ][$_NIOREACTOR-3-RW] ServerConnection [id=1, schema=TESTDB, host=127.0.0.1, user=root,txIsolation=3, autocommit=true, schema=TESTDB]SELECT * FROM `db1`.`t_gaojs` LIMIT 0 err:java.sql.SQLNonTransientException: find no Route:SELECT * FROM `db1`.`t_gaojs` LIMIT 0 java.sql.SQLNonTransientException: find no Route:SELECT * FROM `db1`.`t_gaojs` LIMIT 0
at io.mycat.route.parser.druid.impl.DruidSelectParser.tryRoute(DruidSelectParser.java:437)
错误原因竟然是:DruidSelectParser类中的tryRoute方法
private void tryRoute(SchemaConfig schema, RouteResultset rrs,
LayerCachePool cachePool) throws SQLNonTransientException {
if(rrs.isFinishedRoute())
{
return;//避免重复路由
}
//无表的select语句直接路由带任一节点
if((ctx.getTables() == null || ctx.getTables().size() == 0)
&&(ctx.getTableAliasMap()==null||ctx.getTableAliasMap().isEmpty())) {
rrs = RouterUtil.routeToSingleNode(rrs, schema.getRandomDataNode(), ctx.getSql());
rrs.setFinishedRoute(true);
return;
}
//RouterUtil.tryRouteForTables(schema, ctx, rrs, true, cachePool);
SortedSet<RouteResultsetNode> nodeSet = new TreeSet<RouteResultsetNode>();
boolean isAllGlobalTable = RouterUtil.isAllGlobalTable(ctx, schema);
for (RouteCalculateUnit unit : ctx.getRouteCalculateUnits()) {
RouteResultset rrsTmp = RouterUtil.tryRouteForTables(schema, ctx, unit, rrs, true, cachePool);
if (rrsTmp != null&&rrsTmp.getNodes()!=null) {
for (RouteResultsetNode node : rrsTmp.getNodes()) {
nodeSet.add(node);
}
}
if(isAllGlobalTable) {//都是全局表时只计算一遍路由
break;
}
}
if(nodeSet.size() == 0) {
Collection<String> stringCollection= ctx.getTableAliasMap().values() ;
for (String table : stringCollection)
{
if(table!=null&&table.toLowerCase().contains("information_schema."))
{
rrs = RouterUtil.routeToSingleNode(rrs, schema.getRandomDataNode(), ctx.getSql());
rrs.setFinishedRoute(true);
return;
}
}
String msg = " find no Route:" + ctx.getSql();
LOGGER.warn(msg);
throw new SQLNonTransientException(msg);
}
RouteResultsetNode[] nodes = new RouteResultsetNode[nodeSet.size()];
int i = 0;
for (Iterator<RouteResultsetNode> iterator = nodeSet.iterator(); iterator.hasNext();) {
nodes[i] = (RouteResultsetNode) iterator.next();
i++;
}
rrs.setNodes(nodes);
rrs.setFinishedRoute(true);
}
相关推荐
Mycat-Server-1.6 源码,可调试
mycat2 install-template(mycat2-install-template-1.20.zip)
mycat2 install-template(mycat2-install-template-1.21.zip)
Mycat-server-1.6.6.1-release-20180908155252-linux.tar.gz
Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz版本下载
最新版linux Mycat-server-1.6.7.5-release-20200410174409-linux.tar.gz
Mycat-server-1.6.7.1-release-20190213150257-linux.tar.gz
Mycat-server-1.6.7.3-release-20190809210613-linux.tar.gz
mycat2(original-mycat2-1.22-release-jar-with-dependencies.jar)
mycat2(mycat2-1.21-release-jar-with-dependencies.jar)
MyCat - 数据库中间件 活跃的、性能好的开源数据库中间件!
MyCat 是目前最流行的基于 java 语言编写的数据库中间件,是一个实现了 MySQL 协议的服务器,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL 原生协议与多个 ...
Mycat-server-1.5.1-RELEASE-20160405120037-linux.tar.gz
window版本:Mycat-server-1.6-RELEASE-20161028204710-win.tar.gz
mycat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC...
Mycat-server-1.5-RELEASE-20160301083012-linux.tar.gz
该资源为mycat 1.6.7.1 的windows版,可实现数据库的读写分离、以及分库分表等操作
Mycat是一个广受好评的数据库中间件。支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常见SQL语法。
mycat-definitive-guidePDF文档.rar
Mycat-server-1.6.7.6-release.jar 源码所需的pom.xml文件