Mycat之String msg = "can't find table define in schema "+ tableName + " schema:" + schema.getName();
错误位置如下:RouterUtil 类中的tryRouteForTables方法
1、正常情况可以查询数据
2、别名查询出现错误
Mycat 怎么就通过不了呢
2017-03-01 20:13:19,812 [WARN ][$_NIOREACTOR-2-RW] ServerConnection [id=4, schema=TESTDB, host=127.0.0.1, user=root,txIsolation=3, autocommit=true, schema=TESTDB]SELECT address as address FROM `t_gaojs` err:java.sql.SQLNonTransientException: can't find table define in schema ADDRESS schema:TESTDB java.sql.SQLNonTransientException: can't find table define in schema ADDRESS schema:TESTDB
at io.mycat.route.util.RouterUtil.tryRouteForTables(RouterUtil.java:1002)
at io.mycat.route.parser.druid.impl.DruidSelectParser.tryRoute(DruidSelectParser.java:412)
at io.mycat.route.parser.druid.impl.DruidSelectParser.changeSql(DruidSelectParser.java:287)
at io.mycat.route.parser.druid.impl.DefaultDruidParser.parser(DefaultDruidParser.java:67)
找到报错原因 ---》 表名字解析错误
错误位置:
RouterUtil 类中的tryRouteForTables方法
/**
* 多表路由
*/
public static RouteResultset tryRouteForTables(SchemaConfig schema, DruidShardingParseInfo ctx,
RouteCalculateUnit routeUnit, RouteResultset rrs, boolean isSelect,
LayerCachePool cachePool)
throws SQLNonTransientException {
List<String> tables = ctx.getTables();
if(schema.isNoSharding()||(tables.size() >= 1&&isNoSharding(schema,tables.get(0)))) {
return routeToSingleNode(rrs, schema.getDataNode(), ctx.getSql());
}
//只有一个表的
if(tables.size() == 1) {
return RouterUtil.tryRouteForOneTable(schema, ctx, routeUnit,
tables.get(0), rrs, isSelect, cachePool);
}
Set<String> retNodesSet = new HashSet<String>();
//每个表对应的路由映射
Map<String,Set<String>> tablesRouteMap = new HashMap<String,Set<String>>();
//分库解析信息不为空
Map<String, Map<String, Set<ColumnRoutePair>>> tablesAndConditions = routeUnit.getTablesAndConditions();
if(tablesAndConditions != null && tablesAndConditions.size() > 0) {
//为分库表找路由
RouterUtil.findRouteWithcConditionsForTables(schema, rrs, tablesAndConditions,
tablesRouteMap, ctx.getSql(), cachePool, isSelect);
if(rrs.isFinishedRoute()) {
return rrs;
}
}
//为全局表和单库表找路由
for(String tableName : tables) {
TableConfig tableConfig = schema.getTables().get(tableName.toUpperCase());
if(tableConfig == null) {
String msg = "can't find table define in schema "+ tableName + " schema:" + schema.getName();
LOGGER.warn(msg);
throw new SQLNonTransientException(msg);
}
if(tableConfig.isGlobalTable()) {//全局表
if(tablesRouteMap.get(tableName) == null) {
tablesRouteMap.put(tableName, new HashSet<String>());
}
tablesRouteMap.get(tableName).addAll(tableConfig.getDataNodes());
} else if(tablesRouteMap.get(tableName) == null) { //余下的表都是单库表
tablesRouteMap.put(tableName, new HashSet<String>());
tablesRouteMap.get(tableName).addAll(tableConfig.getDataNodes());
}
}
//此处省略如下代码
}
相关推荐
Mycat-server-1.6-RELEASE-20161028204710-linux.tar
1. **bin** 目录:包含了MyCat的启动脚本(如`mycat-start.sh`、`mycat-stop.sh`)、日志清理脚本等。 2. **conf** 目录:存放MyCat的配置文件,如`schema.xml`(定义数据节点和表的分片策略)、`server.xml`...
- 下载:首先从官方网站或者可靠的源获取适合Windows环境的Mycat版本,例如“Mycat-server-1.6-RELEASE-20161028204710-win”。 - 解压:将下载的压缩包解压到本地目录,通常包含Mycat的服务器端程序。 - 配置:...
【标题】"mycat2 install-template(mycat2-install-template-1.21.zip)" 指的是MyCat 2的一个安装模板文件,版本为1.21,通常包含了安装MyCat 2所需的所有配置文件和脚本,用于简化部署过程。 【描述】虽然描述...
在标题"Mycat-server-1.6.7.6-release-windows-linux.rar"中,我们可以看到这是Mycat的1.6.7.6版本服务器的发布包,同时提供了适用于Windows和Linux两种操作系统平台的安装包。这表明Mycat具有良好的跨平台特性,...
《Mycat-server-1.6.6.1在Linux环境下的部署与应用》 Mycat是一款开源的分布式数据库中间件,它主要用于解决大数据环境下单机数据库的性能瓶颈问题,实现了数据的分布式存储和处理。Mycat-server-1.6.6.1是其在2018...
在这个最新版的 Linux Mycat-server-1.6.7.5-release-20200410174409-linux.tar.gz 压缩包中,包含了运行 Mycat 服务所需的所有组件和配置文件。 1. **Mycat 的核心功能** - **分库分表**:Mycat 可以将一个大表...
本文将详细解析Mycat-server-1.6.7.3-release-20190809210613-linux.tar.gz这个版本的Mycat服务器。 Mycat的核心理念是数据库分片,即将一个大表分散存储在多个物理节点上,通过特定算法进行数据路由,实现水平扩展...
### **数据量大的几种解决方案** - mysql集群, 主从,读写分离 - 冷热分离,部分冷数据(不经常使用的数据)移...- 分库分表 mycat/ shadingjdbc - NewSQL数据库,hbase 没有1个积分的私聊我哈,我给你免费。。。。。
mycat2(original-mycat2-1.22-release-jar-with-dependencies.jar)
在本文中,我们将详细探讨最新版的Mycat——Mycat-server-1.6.7.5-release-20200410174409在Windows操作系统上的安装、配置和使用。 1. **下载与解压** 首先,你需要从官方网站或可信的源获取`windows Mycat-...
Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz版本下载
《深入解析mycat2:基于mycat2-1.21-release-jar-with-dependencies.jar的分布式数据库中间件》 mycat2是一款开源的、高性能的、基于Java开发的分布式数据库中间件,它旨在解决大数据分布式存储和处理的问题。mycat...
在这个标题为"Mycat-server-1.6.7.1-release-20190213150257-linux.tar.gz"的压缩包中,包含了运行Mycat服务所需的所有文件,适用于Linux环境,特别是CentOS7系统。 首先,我们需要了解Mycat的核心功能。Mycat的...
mycat2(mycat2-1.22-release-jar-with-dependencies.jar)
【标题】"Mycat-server-1.6.7.3-release-20190927161129-win.tar.gz" 提供的是Mycat数据库中间件的一个特定版本,适用于Windows系统。这个文件是一个经过压缩的归档文件,其扩展名是`.tar.gz`,意味着它首先被打包成...
在标题中提到的"Mycat-server-1.6.7.1-release-20200209222254-win.tar.gz",这是Mycat的一个特定版本——1.6.7.1,适用于Windows操作系统。这个压缩包包含了部署Mycat在Windows环境所需的所有文件。 Mycat的核心...
【标题】"Mycat-server-1.6"是一个针对大型分布式数据库系统设计的开源数据库中间件,主要用于解决海量数据的存储与访问问题。在Linux环境下安装Mycat,是构建高可用、高并发数据库集群的关键步骤。 【描述】"Linux...
Mycat-server-1.6.5-release-20180122220033-linux是专为Linux环境设计的版本,它提供了读写分离、数据库分库分表、主从备份等一系列关键功能,旨在优化数据库性能,提高系统的可扩展性和可用性。 首先,让我们深入...
《深入解析Mycat-Server-1.6源码》 Mycat是开源的分布式数据库中间件,它主要用于解决大数据环境下数据分片、读写分离等问题,是Java开发的一款高性能、高可用的数据库集群管理工具。Mycat-Server-1.6版本的源码...