ERROR 1184 (HY000): Invalid DataSource:0

 目录

一、问题描述

二、解决历程

三、解决方案


一、问题描述

         这个问题出现的场景是我在Linux中使用MyCat用户远程登录时出现的,搞了很久。错误提示如下图所示:

ERROR 1184 (HY000): Invalid DataSource:0

         可以看出,使用show tables找不到表。

二、解决历程

         百度反正没有我这种错误的。我参考过如下文章,都没有解决。

https://blog.csdn.net/Chen_leilei/article/details/109566480

https://blog.csdn.net/cnds123321/article/details/117934134

         最后定位我的问题是数据库问题。


三、解决方案

         首先,我们看一下schema.xml这个文件的配置。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://io.mycat/">  
  <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>  
  <dataNode name="dn1" dataHost="host1" database="testdb"/>  
  <dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> 
    <heartbeat>select user()</heartbeat>  
    <!-- can have multi write hosts -->  
    <writeHost host="hostM1" url="192.168.85.131:3306" user="root" password="123"> 
      <!-- can have multi read hosts -->  
      <readHost host="hostS1" url="192.168.85.132:3306" user="root" password="123"/> 
    </writeHost> 
  </dataHost> 
</mycat:schema>

        我们知道,schema.xml是MyCat三大配置文件之一,其中定义逻辑库,表、分片节点等内容。

       而在运行原理上,我们又知道MyCat并不直接指向实际的物理库,而是有一个逻辑库的概念。我们通过<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>定义了逻辑库的数据节点,但是逻辑库dataNode="dn1"最终其实还是要指向实际的物理库,所以我们也要通过<dataNode name="dn1" dataHost="host1" database="testdb" />来指向实际的物理库。而我的问题就出在这个物理库上,我实际的物理库根本就没有表,所以自然报ERROR 1184 (HY000): Invalid DataSource:0这个错误了。 实际我testdb这个真实的物理库也没建,所以也会出现卡顿问题。

       问题最终得以解决。其实问题原因很简单,但是定位的过程中由于不知道什么原因很难。仅就本例而言,我认为是我没有搞清楚<scema>和<dataNode>这两个标签分别配置的是什么意思,其实就是分别对应虚拟的逻辑库和真实的物理库,物理库就是数据库中必须真实有这个数据库。经过我在数据库真实创建了destdb这个库,以及库下再放几张表,这个问题就解决了!

 

上一篇:mycat导入导出数据


下一篇:2、安装启动(Mycat)