pid:1 nid:3 exception:setl:com.alibaba.otter.node.etl.load.exception.LoadException: java.util.concurrent.ExecutionException: com.alibaba.otter.node.etl.load.exception.LoadException: com.alibaba.otter.node.etl.load.exception.LoadException: com.alibaba.otter.node.etl.load.exception.LoadException: org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [SELECT COUNT(*) FROM retl.retl_mark WHERE id BETWEEN 0 AND 999]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'retl.retl_mark' doesn't exist
原提问者GitHub用户colalemon
根据错误提示,这个异常是由于查询语句中的表名 "retl.retl_mark" 不存在导致的。可能的原因是该表没有被正确创建或者已经被删除。
你需要进一步检查是否正确创建了该表,并确保在查询语句中使用了正确的表名。如果表确实存在,你可以检查数据库的连接和权限是否设置正确,并确保查询语句中的表名是正确的。
这个错误信息显示了一个SQL语句查询了一个名为'retl.retl_mark'的表,但是数据库中并不存在这个表。因此,你需要检查一下该表是否存在,如果不存在,你需要创建这个表。你可以使用MySQL的命令行工具或者图形化界面工具来进行操作,具体步骤如下:
打开MySQL的命令行工具或者图形化界面工具。
连接到你的MySQL数据库。
在数据库中执行以下SQL语句来创建'retl.retl_mark'表:
CREATE TABLE retl.retl_mark (
id int(11) NOT NULL AUTO_INCREMENT,
-- 其他列定义
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SHOW TABLES LIKE 'retl.retl_mark';
说明:该脚本为双A机房数据库同步的初始化SQL,如无该需求请忽略之,注意修改密码 /* 供 otter 使用, otter 需要对 retl.* 的读写权限,以及对业务表的读写权限
创建database retl / CREATE DATABASE retl; / 2. 用户授权 给同步用户授权 / CREATE USER retl@'%' IDENTIFIED BY 'retl'; GRANT USAGE ON . TO retl@'%'; GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO retl@'%'; GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON retl. TO retl@'%'; /* 业务表授权,这里可以限定只授权同步业务的表 */ GRANT SELECT, INSERT, UPDATE, DELETE ON . TO retl@'%';
/* 3. 创建系统表 */ USE retl; DROP TABLE IF EXISTS retl.retl_buffer; DROP TABLE IF EXISTS retl.retl_mark; DROP TABLE IF EXISTS retl.xdual;
CREATE TABLE retl_buffer ( ID BIGINT(20) AUTO_INCREMENT, TABLE_ID INT(11) NOT NULL, FULL_NAME varchar(512), TYPE CHAR(1) NOT NULL, PK_DATA VARCHAR(256) NOT NULL, GMT_CREATE TIMESTAMP NOT NULL, GMT_MODIFIED TIMESTAMP NOT NULL, CONSTRAINT RETL_BUFFER_ID PRIMARY KEY (ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE retl_mark ( ID BIGINT AUTO_INCREMENT, CHANNEL_ID INT(11), CHANNEL_INFO varchar(128), CONSTRAINT RETL_MARK_ID PRIMARY KEY (ID) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE xdual ( ID BIGINT(20) NOT NULL AUTO_INCREMENT, X timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (ID) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
/* 4. 插入初始化数据 */ INSERT INTO retl.xdual(id, x) VALUES (1,now()) ON DUPLICATE KEY UPDATE x = now();
原回答者GitHub用户 funnyAnt
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。