OMS在反向增量同步时,Incr-Sync组件启动失败,报错Unknown database 'omstxndb'

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】OMS
【 使用版本 】feature_4.2.4_ce
【问题描述】在完成以下的正向切换启动反向增量同步后,在查看该数据迁移任务组件时发现Incr-Sync组件出于异常状态,查看日志如下:

错误日志:
1
[2024-09-05 11:04:09.938] [ERROR] [main] [notifyStopped:]
2
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database ‘omstxndb’
3
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
4
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
5
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
6
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
7
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
8
at com.mysql.jdbc.Util.getInstance(Util.java:408)
9
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)
10
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3978)
11
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3914)
12
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)
13
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)
14
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2491)
15
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2449)
16
at com.mysql.jdbc.StatementImpl.executeInternal(StatementImpl.java:845)
17
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:745)
18
at com.alibaba.druid.pool.DruidPooledStatement.execute(DruidPooledStatement.java:644)
19
at com.oceanbase.oms.connector.jdbc.sink.mysql.MySQLSQLDialect.sqlExecute(MySQLSQLDialect.java:110)
20
at com.oceanbase.oms.connector.jdbc.sink.mysql.MySQLSQLDialect.createAndCheckAppendTable(MySQLSQLDialect.java:84)
21
at com.oceanbase.oms.connector.jdbc.sink.transactionmark.AppendMarker.init(AppendMarker.java:48)
22
at com.oceanbase.oms.connector.jdbc.sink.AbstractJDBCSinkBooster.initializeTransactionMarker(AbstractJDBCSinkBooster.java:217)
23
at com.oceanbase.oms.connector.jdbc.sink.AbstractJDBCSinkBooster.initSinkEnv(AbstractJDBCSinkBooster.java:106)
24
at com.oceanbase.oms.connector.coordinator.BootStrapPanel.boot(BootStrapPanel.java:195)
25
at com.oceanbase.oms.connector.jdbc.coordinator.Bootstrap.main(Bootstrap.java:41)
26
[2024-09-05 11:04:09.944] [ERROR] [main] [main thread error]
27
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database ‘omstxndb’
28
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
29
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
30
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
31
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
32
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)

【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

您的问题可能存在误解,实际上据我所知,Unknown database 'omstxndb' 错误表明 OMS 在尝试连接指定的数据库 omstxndb 时未能找到该数据库。这可能是由于以下几个原因导致的:

  1. 数据库不存在:目标端数据库中没有名为 omstxndb 的数据库。请确认目标端数据库中是否存在该数据库。如果不存在,请创建相应的数据库。
  2. 配置错误:OMS 配置文件中指定了错误的数据库名称。请检查 OMS 配置文件中的数据库名称是否正确。
  3. 权限问题:执行操作的用户没有足够的权限访问 omstxndb 数据库。请确认执行操作的用户是否拥有访问该数据库的权限。

针对您的问题,建议您按照以下步骤排查:

  1. 确认目标端数据库中是否存在 omstxndb 数据库。如果没有,请创建该数据库。
  2. 检查 OMS 配置文件中的数据库名称是否正确。如果配置错误,请更正配置文件中的数据库名称。
  3. 确认执行操作的用户是否拥有访问 omstxndb 数据库的权限。如果没有,请授予相应的权限。

此外,根据您提供的日志信息,可以看出 OMS 在尝试执行某些 SQL 语句时遇到了问题。具体来说,错误发生在 com.oceanbase.oms.connector.jdbc.sink.mysql.MySQLSQLDialect.createAndCheckAppendTable 方法中,该方法负责创建和检查追加表。因此,除了上述建议外,还需要确认目标端数据库中是否存在预期的表结构。如果表结构不存在或不正确,也可能导致类似错误的发生。

综上所述,建议您首先确认目标端数据库中是否存在 omstxndb 数据库及其相关的表结构,并检查 OMS 配置文件中的数据库名称是否正确。如果问题仍然存在,请进一步检查执行操作的用户权限。

具体信息可参考以下文档:

  1. 更新 Incr-Sync 组件
  2. 启动和暂停 Incr-Sync 组件
  3. 单地域多节点部署
  4. 查看 Incr-Sync 组件的详情
  5. 组件基本原理
  6. 如何设置限流限速
  7. 删除 Incr-Sync 组件
  8. 查看数据迁移任务的详情


看报错的信息 是不能找到omstxndb

哦哦,看到文档说明了,谢谢!