MySQL 版本:5.7.26 Canal 版本:1.1.0
有天发现从 canal 处收不到变更,查看日志发现以下报错:
2019-12-02 14:36:51.232 [destination = dw, address = /192.168.8.57:3306 , EventParser] ERROR c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - dump address /192.168.8.57:3306 has an error, retrying. caused by com.alibaba.otter.canal.parse.exception.CanalParseException: java.io.IOException: ErrorPacket [errorNumber=1046, fieldCount=-1, message=No database selected, sqlState=3D000, sqlStateMarker=#] with command: show create table test
.a
;show create table test
.a000001_midd_
;... at com.alibaba.otter.canal.parse.driver.mysql.MysqlQueryExecutor.queryMulti(MysqlQueryExecutor.java:109) ~[canal.parse.driver-1.1.0.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.MysqlConnection.queryMulti(MysqlConnection.java:107) ~[canal.parse-1.1.0.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.dumpTableMeta(DatabaseTableMeta.java:175) ~[canal.parse-1.1.0.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.rollback(DatabaseTableMeta.java:129) ~[canal.parse-1.1.0.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.AbstractMysqlEventParser.processTableMeta(AbstractMysqlEventParser.java:91) ~[canal.parse-1.1.0.jar:na] at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:188) ~[canal.parse-1.1.0.jar:na] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_161]
我把报错提示的 show create table ... 语句挎贝,在不选中 database 的情况下执行查询,MySQL 报了 1046 的错误。
后来我发现若存在视图 A 引用视图 B、且视图 B 中存在中间查询就会有这样的报错。 如:
SELECT a.xxx FROM ( SELECT aa.xxx FROM aa ) a
如果我把中间查询的部分抽成另一张视图就没有问题:
-- 视图 B_tmp SELECT aa.xxx FROM aa
-- 视图 B SELECT a.xxx FROM B_tmp a
原提问者GitHub用户VivionLin
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。