Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

canal.deployer-1.1.6版本的安装包有bug #4245

Closed
2 tasks
qq664042 opened this issue Jun 22, 2022 · 23 comments
Closed
2 tasks

canal.deployer-1.1.6版本的安装包有bug #4245

qq664042 opened this issue Jun 22, 2022 · 23 comments
Assignees

Comments

@qq664042
Copy link

  • I have searched the issues of this repository and believe that this is not a duplicate.
  • I have checked the FAQ of this repository and believe that this is not a duplicate.

environment

  • canal 1.1.6
  • mysql 5.7

Issue Description

github下载地址
下载 下载后,发现源码包与字节码包的内容是不一至的,字节码包部署后,疯狂报错,说找不到BASE TABLE错误。反编译在对比源码包,发现不一至,字节码包的代码有bug.

8b0da36f418976ae856a7c547c64a47

Just put your stack trace here!

image

@Jack1007
Copy link

我也遇到了这个问题
java.io.IOException: ErrorPacket [errorNumber=1146, fieldCount=-1, message=Table 'test.base table' doesn't exist, sqlState=42S02, sqlStateMarker=#]

@jimmy384
Copy link

jimmy384 commented Jun 22, 2022

#4220 我也遇到了,源码编译没问题。当时提了issue之后官方重新上传了包和 docker 镜像,但重新上传的好像还是有问题

@qq664042
Copy link
Author

Reference i

有没有发现源码包与字节码包的上传日期相差好几天啊
image
现在是不知道怎么用源码包,打包成目标的字节码包。

@jimmy384
Copy link

#4219 (comment) 当时我也发现了,我就是通过这个日期发现官方重新上传了一次包。
我当时是把代码拉下来,然后从1.1.6的tag创建一个本地分支,mvn package,把打包出来的canal.parser.jar替换掉,就换了一个jar包

@qq664042
Copy link
Author

#4219 (comment) 当时我也发现了,我就是通过这个日期发现官方重新上传了一次包。 我当时是把代码拉下来,然后从1.1.6的tag创建一个本地分支,mvn package,把打包出来的canal.parser.jar替换掉,就换了一个jar包

好像可以这样打包,打包完之后在根目录下的target里面
mvn clean install -Dmaven.test.skip=true -Denv=release

@hncdyj123
Copy link
Contributor

开始一直以为是我的数据库有问题,后面我发现老是在创建BASE TABLE表
可以在conf/example/instance.properties中

canal.instance.filter.black.regex=new_energy\\.BASE.*

@qq664042
Copy link
Author

开始一直以为是我的数据库有问题,后面我发现老是在创建BASE TABLE表 可以在conf/example/instance.properties中

canal.instance.filter.black.regex=new_energy\\.BASE.*

这种方式好像是可以,但是源码包与安装包的代码不到至总感觉怪怪的

@bwcx-jzy
Copy link

开始一直以为是我的数据库有问题,后面我发现老是在创建BASE TABLE表 可以在conf/example/instance.properties中

canal.instance.filter.black.regex=new_energy\\.BASE.*

我用配置这个后还是报错,还有其他地方需要修改配置吗?

@bwcx-jzy
Copy link

发现报错的信息每个环境不一样

2022-06-24 09:07:23.788 [destination = example , address = /127.0.0.1:3338 , EventParser] ERROR com.alibaba.otter.canal.common.alarm.LogAlarmHandler - destination:example[com.alibaba.otter.canal.parse.exception.CanalParseException: java.io.IOException: ErrorPacket [errorNumber=1146, fieldCount=-1, message=Table 'mysql.BASE TABLE' doesn't exist, sqlState=42S02, sqlStateMarker=#]
 with command: show create table `mysql`.`columns_priv`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`db`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`engine_cost`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`event`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`func`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`general_log`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`gtid_executed`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`help_category`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`help_keyword`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`help_relation`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`help_topic`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`innodb_index_stats`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`innodb_table_stats`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`ndb_binlog_index`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`plugin`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`proc`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`procs_priv`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`proxies_priv`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`server_cost`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`servers`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`slave_master_info`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`slave_relay_log_info`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`slave_worker_info`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`slow_log`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`tables_priv`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`time_zone`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`time_zone_leap_second`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`time_zone_name`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`time_zone_transition`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`time_zone_transition_type`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`user`;show create table `mysql`.`BASE TABLE`;
Caused by: java.io.IOException: ErrorPacket [errorNumber=1146, fieldCount=-1, message=Table 'mysql.BASE TABLE' doesn't exist, sqlState=42S02, sqlStateMarker=#]
 with command: show create table `mysql`.`columns_priv`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`db`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`engine_cost`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`event`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`func`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`general_log`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`gtid_executed`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`help_category`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`help_keyword`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`help_relation`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`help_topic`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`innodb_index_stats`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`innodb_table_stats`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`ndb_binlog_index`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`plugin`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`proc`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`procs_priv`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`proxies_priv`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`server_cost`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`servers`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`slave_master_info`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`slave_relay_log_info`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`slave_worker_info`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`slow_log`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`tables_priv`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`time_zone`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`time_zone_leap_second`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`time_zone_name`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`time_zone_transition`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`time_zone_transition_type`;show create table `mysql`.`BASE TABLE`;show create table `mysql`.`user`;show create table `mysql`.`BASE TABLE`;
        at com.alibaba.otter.canal.parse.driver.mysql.MysqlQueryExecutor.queryMulti(MysqlQueryExecutor.java:109)
        at com.alibaba.otter.canal.parse.inbound.mysql.MysqlConnection.queryMulti(MysqlConnection.java:111)
        at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.dumpTableMeta(DatabaseTableMeta.java:233)
        at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.rollback(DatabaseTableMeta.java:174)
        at com.alibaba.otter.canal.parse.inbound.mysql.AbstractMysqlEventParser.processTableMeta(AbstractMysqlEventParser.java:142)
        at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$1.run(AbstractEventParser.java:197)
        at java.lang.Thread.run(Thread.java:748)

  1. mysql.BASE TABLE
  2. demo_ds_1.BASE TABLE
  3. test.base table
  4. canal-sync.BASE TABLE

出现这样的情况,是不是因为用户的数据里面不一致造成的呢?

@jimmy384
Copy link

都一样是BASE TABLE, 前面只是数据库的名字,每个人肯定起的名字不一样

@bwcx-jzy
Copy link

#4219 (comment) 当时我也发现了,我就是通过这个日期发现官方重新上传了一次包。 我当时是把代码拉下来,然后从1.1.6的tag创建一个本地分支,mvn package,把打包出来的canal.parser.jar替换掉,就换了一个jar包

我本地打包还会有这样的错

@bwcx-jzy
Copy link

都一样是BASE TABLE, 前面只是数据库的名字,每个人肯定起的名字不一样

不像,我这个 mysql,我没有指定这个数据库

@bwcx-jzy
Copy link

都一样是BASE TABLE, 前面只是数据库的名字,每个人肯定起的名字不一样

如果是数据库名称,是不是哪里可以配置什么?会不会是因为自动加载 admin 造成的?

@hncdyj123
Copy link
Contributor

@bwcx-jzy 你可以把这些语句拉到mysql的mysql库执行下,我帮你格式化了一下,主要还是这段有问题

SHOW CREATE TABLE `mysql`.`BASE TABLE`;

SHOW CREATE TABLE `mysql`.`columns_priv`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`db`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`engine_cost`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`event`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`func`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`general_log`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`gtid_executed`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`help_category`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`help_keyword`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`help_relation`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`help_topic`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`innodb_index_stats`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`innodb_table_stats`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`ndb_binlog_index`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`plugin`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`proc`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`procs_priv`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`proxies_priv`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`server_cost`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`servers`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`slave_master_info`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`slave_relay_log_info`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`slave_worker_info`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`slow_log`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`tables_priv`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`time_zone`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`time_zone_leap_second`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`time_zone_name`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`time_zone_transition`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`time_zone_transition_type`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;
SHOW CREATE TABLE `mysql`.`user`;
SHOW CREATE TABLE `mysql`.`BASE TABLE`;

直接这样试试

可以在conf/example/instance.properties中
canal.instance.filter.black.regex=mysql\\.BASE.*

@hncdyj123
Copy link
Contributor

各位有遇到关键字报错的吗 转义也做了 好像无效 是不是因为打包的问题 复现了?
#4241

@SZDRZ
Copy link

SZDRZ commented Jun 25, 2022

跟各位一样的问题。期初还以自己哪里配置错了,搞了半天才从数据库中发现有问题的SQL语句

image

@yreezy
Copy link

yreezy commented Jun 28, 2022

哈哈 一样 这个BASE TABLE 是table value 需要过滤的 但是deploy包有问题 - - 导致这块过滤没生效

@yreezy
Copy link

yreezy commented Jun 28, 2022

问个问题 我本地包package后 丢到 canal-deployer/lib 替换同名文件 启动之后日志什么的还是没有 这个有遇到么

@yreezy
Copy link

yreezy commented Jun 28, 2022

都一样是BASE TABLE, 前面只是数据库的名字,每个人肯定起的名字不一样

如果是数据库名称,是不是哪里可以配置什么?会不会是因为自动加载 admin 造成的?

实际上这里是 show full tables from " + schema + " where Table_type = 'BASE TABLE'查询到的两个字段
这里会有两个字段 一个表名 一个type->BASE TABLE
所以目前最好的方法 要么是替换jar包 要么是black.regex去过滤 + .*//.BASE TABLE

@goxxdev
Copy link

goxxdev commented Jul 11, 2022

错误位置:
com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta:211

fixed issue #4216 , support polardb-x show tables
753fad6 jianghang.loujh [email protected] on 2022/6/10 at 13:36

@CoderDuMeng
Copy link

同样docker image 就没问题

@AaronZhangL
Copy link

应该过滤掉所有SCHEMA名称下的BASE TABLE表名,修改文件[/home/admin/canal-server/conf/{your-db-schema-name}/instance.properties]中的下面设置:

canal.instance.filter.black.regex=.*\\.BASE TABLE.*

下面的写法只会过滤掉特定SCHEMA, new_energy的BASE TABLE表

canal.instance.filter.black.regex=new_energy\\.BASE.*

kunwuya added a commit to kunwuya/canal that referenced this issue Jul 30, 2022
@agapple
Copy link
Member

agapple commented Aug 11, 2022

@agapple agapple closed this as completed Aug 11, 2022
@agapple agapple self-assigned this Aug 11, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests