MyCATApache/Mycat-Server

删除某个逻辑库后,操作其他逻辑库时,一直报被删除的数据库不存在。

Stephen-Jack opened this issue · 1 comments

1、bug描述
删除某个逻辑库后,查询该库,提示数据库不存在;然后操作其他逻辑库时,也一直报被删除的数据库不存在。

2、版本号(非常重要)
v 1.6.7.4

3、相关表的配置信息
schema.xml (需包含表的配置信息,mysql的连接驱动是JDBC还是native方式)
<mycat:schema xmlns:mycat="http://io.mycat/">

<schema name="basic" dataNode = "basic">
	<table name="application" dataNode="basic"/>
	<table name="default_application" dataNode="basic"/>
	<table name="object_field" dataNode="basic"/>
	<table name="object_module" dataNode="basic"/>
	<table name="page_info" dataNode="basic"/>
	<table name="project" dataNode="basic"/>
	<table name="project_release" dataNode="basic"/>
	<table name="user" dataNode="basic"/>
	<table name="video_config" dataNode="basic"/>
	<table name="video_device" dataNode="basic"/>
	<table name="view_domain" dataNode="basic"/>
	<table name="view_info" dataNode="basic"/>
</schema>

<dataNode name="basic" dataHost="host1" database="basic" />
<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="localhost:3306" user="root"
			   password="123456">
		<!-- can have multi read hosts -->
		<readHost host="hostS2" url="localhost:3306" user="root" password="123456" />
	</writeHost>
</dataHost>

</mycat:schema>

没有使用到rule.xml
server.xml:

<mycat:server xmlns:mycat="http://io.mycat/">

0
1
0
0

	<property name="sequnceHandlerType">2</property>
	<!--<property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>-->
	<!--必须带有MYCATSEQ_或者 mycatseq_进入序列匹配流程 注意MYCATSEQ_有空格的情况-->
	<property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>
<property name="subqueryRelationshipCheck">false</property> <!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false -->
   
	<property name="processorBufferPoolType">0</property>
	<property name="handleDistributedTransactions">0</property>
	
	<property name="useOffHeapForMerge">0</property>

	<!--
		单位为m
	-->
    <property name="memoryPageSize">64k</property>

	<!--
		单位为k
	-->
	<property name="spillsFileBufferSize">1k</property>

	<property name="useStreamOutput">0</property>

	<!--
		单位为m
	-->
	<property name="systemReserveMemorySize">384m</property>


	<!--是否采用zookeeper协调切换  -->
	<property name="useZKSwitch">false</property>

	<!-- XA Recovery Log日志路径 -->
	<!--<property name="XARecoveryLogBaseDir">./</property>-->

	<!-- XA Recovery Log日志名称 -->
	<!--<property name="XARecoveryLogBaseName">tmlog</property>-->
	<!--如果为 true的话 严格遵守隔离级别,不会在仅仅只有select语句的时候在事务中切换连接-->
	<property name="strictTxIsolation">false</property>
	
	<property name="useZKSwitch">true</property>
	
</system>

<!-- 全局SQL防火墙设置 -->
<!--白名单可以使用通配符%或着*-->
<!--例如<host host="127.0.0.*" user="root"/>-->
<!--例如<host host="127.0.*" user="root"/>-->
<!--例如<host host="127.*" user="root"/>-->
<!--例如<host host="1*7.*" user="root"/>-->
<!--这些配置情况下对于127.0.0.1都能以root账户登录-->
<!--
<firewall>
   <whitehost>
      <host host="1*7.0.0.*" user="root"/>
   </whitehost>
   <blacklist check="false">
   </blacklist>
</firewall>
-->

<user name="root" defaultAccount="true">
	<property name="password">root</property>
	<property name="schemas">basic</property>
</user>

</mycat:server>

4、操作步骤

  1. mysql删除物理库database1;
  2. 更新zk节点配置信息
  3. 执行/* !mycat:schema=database1*/ USE database1;语句,提示数据库不存在,认定同步到mycat完成。
  4. 同步完成后,查询database2语句,提示database1不存在,执行sql失败。

5、期望结果
可以正常操作其他逻辑库。

6、实际结果
执行的是basic数据库,抛的异常是被删除的数据库不存在

SQL: /* !mycat:schema=basic */SELECT COUNT( 1 ) FROM project WHERE (id = ?)

Cause: java.sql.SQLException: Unknown MyCAT Database 'yanshi_data'

7、额外信息
使用场景是模拟多租户。业务上一个应用对应一个数据库,创建一个应用,就在mysql上创建一个数据库,
同时同步到mycat,创建一个对应的逻辑库。删除同理。
删除数据库中的表后,执行其他sql操作没有提示表不存在的问题。

你试试把客户端连接的mycat关闭,获取一个新的连接试试