OceanBase使用canal同步数据到redis

【 使用环境 】生产环境
【 obbinlog组件】
【 使用版本 】
【问题描述】canal服务端解析通过obbinlog转换的binlog日志,ddl报错,cpu使用率高达1000%。有什么办法可以过滤掉么。
【复现路径】
【附件及日志】


canal配置

instance.properties

#################################################
## mysql serverId , v1.0.26+ will autoGen
# canal.instance.mysql.slaveId=23124

# enable gtid use true/false
canal.instance.gtidon=false

# rds oss binlog
canal.instance.rds.accesskey=
canal.instance.rds.secretkey=
canal.instance.rds.instanceId=

# position info
canal.instance.master.address=ip:2883
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
canal.instance.master.gtid=

# multi stream for polardbx
canal.instance.multi.stream.on=false

# ssl
#canal.instance.master.sslMode=DISABLED
#canal.instance.master.tlsVersions=
#canal.instance.master.trustCertificateKeyStoreType=
#canal.instance.master.trustCertificateKeyStoreUrl=
#canal.instance.master.trustCertificateKeyStorePassword=
#canal.instance.master.clientCertificateKeyStoreType=
#canal.instance.master.clientCertificateKeyStoreUrl=
#canal.instance.master.clientCertificateKeyStorePassword=

# table meta tsdb info
canal.instance.tsdb.enable=false
#canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb
#canal.instance.tsdb.dbUsername=canal
#canal.instance.tsdb.dbPassword=canal
canal.instance.tsdb.ignoreParseError=true

#canal.instance.standby.address =
#canal.instance.standby.journal.name =
#canal.instance.standby.position =
#canal.instance.standby.timestamp =
#canal.instance.standby.gtid=

# username/password
canal.instance.dbUsername=root
canal.instance.dbPassword=123456
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false
#canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ==

# table regex
 canal.instance.filter.regex=.*\\..*

# table black regex
canal.instance.filter.black.regex=mysql\\.slave_.*,binlog_database\\.*
# table field filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
#canal.instance.filter.field=test1.t_product:id/subject/keywords,test2.t_company:id/name/contact/ch
# table field black filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
#canal.instance.filter.black.field=test1.t_product:subject/product_image,test2.t_company:id/name/contact/ch

# mq config
canal.mq.topic=example
# dynamic topic route by schema or table regex
#canal.mq.dynamicTopic=mytest1.user,topic2:mytest2\\..*,.*\\..*
canal.mq.partition=0
# hash partition config
#canal.mq.enableDynamicQueuePartition=false
#canal.mq.partitionsNum=3
#canal.mq.dynamicTopicPartitionNum=test.*:4,mycanal:6
#canal.mq.partitionHash=test.table:id^name,.*\\..*
#################################################


canal.properties
#################################################
######### 		common argument		#############
#################################################

# tcp bind ip
canal.ip =
# register ip to zookeeper
canal.register.ip =
canal.port = 10311
canal.metrics.pull.port = 11112
# canal instance user/passwd
# canal.user = canal
# canal.passwd =

# canal admin config
#canal.admin.manager = 127.0.0.1:8089
canal.admin.port = 11110
canal.admin.user = admin
canal.admin.passwd =
# admin auto register
#canal.admin.register.auto = true
#canal.admin.register.cluster =
#canal.admin.register.name =

canal.zkServers =
# flush data to zk
canal.zookeeper.flush.period = 1000
canal.withoutNetty = false
# tcp, kafka, rocketMQ, rabbitMQ, pulsarMQ
canal.serverMode = tcp
# flush meta cursor/parse position to file
canal.file.data.dir = ${canal.conf.dir}
canal.file.flush.period = 1000
## memory store RingBuffer size, should be Math.pow(2,n)
canal.instance.memory.buffer.size = 16384
## memory store RingBuffer used memory unit size , default 1kb
canal.instance.memory.buffer.memunit = 1024 
## meory store gets mode used MEMSIZE or ITEMSIZE
canal.instance.memory.batch.mode = MEMSIZE
canal.instance.memory.rawEntry = true

## detecing config
canal.instance.detecting.enable = false
#canal.instance.detecting.sql = insert into retl.xdual values(1,now()) on duplicate key update x=now()
canal.instance.detecting.sql = select 1
canal.instance.detecting.interval.time = 3
canal.instance.detecting.retry.threshold = 3
canal.instance.detecting.heartbeatHaEnable = false

# support maximum transaction size, more than the size of the transaction will be cut into multiple transactions delivery
canal.instance.transaction.size =  1024
# mysql fallback connected to new master should fallback times
canal.instance.fallbackIntervalInSeconds = 60

# network config
canal.instance.network.receiveBufferSize = 16384
canal.instance.network.sendBufferSize = 16384
canal.instance.network.soTimeout = 30

# binlog filter config
canal.instance.filter.druid.ddl = true
canal.instance.filter.query.dcl = false
canal.instance.filter.query.dml = false
canal.instance.filter.query.ddl = false
canal.instance.filter.table.error = false
canal.instance.filter.rows = false
canal.instance.filter.transaction.entry = false
canal.instance.filter.dml.insert = false
canal.instance.filter.dml.update = false
canal.instance.filter.dml.delete = false

# binlog format/image check
canal.instance.binlog.format = ROW,STATEMENT,MIXED 
canal.instance.binlog.image = FULL,MINIMAL,NOBLOB

# binlog ddl isolation
canal.instance.get.ddl.isolation = false

# parallel parser config
canal.instance.parser.parallel = true
## concurrent thread number, default 60% available processors, suggest not to exceed Runtime.getRuntime().availableProcessors()
#canal.instance.parser.parallelThreadSize = 2
## disruptor ringbuffer size, must be power of 2
#canal.instance.parser.parallelBufferSize = 16384
canal.instance.parser.parallelBufferSize = 256

# table meta tsdb info
canal.instance.tsdb.enable = true
canal.instance.tsdb.dir = ${canal.file.data.dir:../conf}/${canal.instance.destination:}
canal.instance.tsdb.url = jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL;
canal.instance.tsdb.dbUsername = canal
canal.instance.tsdb.dbPassword = canal
# dump snapshot interval, default 24 hour
canal.instance.tsdb.snapshot.interval = 24
# purge snapshot expire , default 360 hour(15 days)
canal.instance.tsdb.snapshot.expire = 360
#canal.instance.tsdb.ignoreParseError=true

#################################################
######### 		destinations		#############
################################################
canal.destinations = example
# conf root dir
canal.conf.dir = ../conf
# auto scan instance dir add/remove and start/stop instance
canal.auto.scan = true
canal.auto.scan.interval = 5
# set this value to 'true' means that when binlog pos not found, skip to latest.
# WARN: pls keep 'false' in production env, or if you know what you want.
canal.auto.reset.latest.pos.mode = false

canal.instance.tsdb.spring.xml = classpath:spring/tsdb/h2-tsdb.xml
#canal.instance.tsdb.spring.xml = classpath:spring/tsdb/mysql-tsdb.xml

canal.instance.global.mode = spring
canal.instance.global.lazy = false
canal.instance.global.manager.address = ${canal.admin.manager}
#canal.instance.global.spring.xml = classpath:spring/memory-instance.xml
canal.instance.global.spring.xml = classpath:spring/file-instance.xml
#canal.instance.global.spring.xml = classpath:spring/default-instance.xml

##################################################
######### 	      MQ Properties      #############
##################################################
# aliyun ak/sk , support rds/mq
canal.aliyun.accessKey =
canal.aliyun.secretKey =
canal.aliyun.uid=

canal.mq.flatMessage = true
canal.mq.canalBatchSize = 50
canal.mq.canalGetTimeout = 100
# Set this value to "cloud", if you want open message trace feature in aliyun.
canal.mq.accessChannel = local

canal.mq.database.hash = true
canal.mq.send.thread.size = 30
canal.mq.build.thread.size = 8

##################################################
######### 		     Kafka 		     #############
##################################################
kafka.bootstrap.servers = 127.0.0.1:9092
kafka.acks = all
kafka.compression.type = none
kafka.batch.size = 16384
kafka.linger.ms = 1
kafka.max.request.size = 1048576
kafka.buffer.memory = 33554432
kafka.max.in.flight.requests.per.connection = 1
kafka.retries = 0

kafka.kerberos.enable = false
kafka.kerberos.krb5.file = ../conf/kerberos/krb5.conf
kafka.kerberos.jaas.file = ../conf/kerberos/jaas.conf

# sasl demo
# kafka.sasl.jaas.config = org.apache.kafka.common.security.scram.ScramLoginModule required \\n username=\"alice\" \\npassword="alice-secret\";
# kafka.sasl.mechanism = SCRAM-SHA-512
# kafka.security.protocol = SASL_PLAINTEXT

##################################################
######### 		    RocketMQ	     #############
##################################################
rocketmq.producer.group = test
rocketmq.enable.message.trace = false
rocketmq.customized.trace.topic =
rocketmq.namespace =
rocketmq.namesrv.addr = 127.0.0.1:9876
rocketmq.retry.times.when.send.failed = 0
rocketmq.vip.channel.enabled = false
rocketmq.tag = 

##################################################
######### 		    RabbitMQ	     #############
##################################################
rabbitmq.host =
rabbitmq.virtual.host =
rabbitmq.exchange =
rabbitmq.username =
rabbitmq.password =
rabbitmq.queue =
rabbitmq.routingKey =
rabbitmq.deliveryMode =


##################################################
######### 		      Pulsar         #############
##################################################
pulsarmq.serverUrl =
pulsarmq.roleToken =
pulsarmq.topicTenantPrefix =

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

4 个赞

根据您的描述,您在使用 OceanBase 的 obbinlog 组件同步数据到 Redis 时遇到 DDL 相关的报错,并且发现 CPU 使用率异常高。这种情况可能与特定的 DDL 操作导致的问题有关。我们可以先利用 obdiag 工具来采集相关日志并进行初步分析。

对于您提到的高CPU使用情况,建议我们首先关注这一点,因为这可能是影响系统稳定性的关键因素之一。至于DDL报错,在了解具体错误信息后,再进一步确定是否需要特别处理。

日志采集场景: [DDL过程中报磁盘空间不足的问题]、[CPU高]
日志采集命令:

obdiag gather scene run --scene=observer.ddl_disk_full
obdiag gather scene run --scene=observer.cpu_high

说明: 上述两条命令分别用于收集可能导致DDL执行失败的日志(例如磁盘空间不足)以及当观察到CPU利用率异常高时的相关日志。这些信息将帮助我们更好地理解当前问题的根源。

接下来,请您提供一些额外的信息以帮助我们更快地定位问题所在:

  1. 能否分享具体的DDL错误消息或错误代码?这有助于我们更准确地判断问题性质。
  2. 这种高CPU占用现象是持续存在还是偶尔发生?如果可以的话,请提供该现象发生的时间段。
  3. 在出现高CPU和DDL错误之前,是否有对数据库结构做出重大更改或者执行了大规模的数据操作?
  4. 您正在使用的OceanBase版本是多少?同时,能否告知所用的Redis版本及其配置概要?
  5. obbinlog 和 canal 的配置文件内容如何?特别是关于DDL同步相关的设置部分。

希望上述信息能帮到您,同时也请您准备好按上述命令收集到的日志文件,以便于后续深入分析。

附上敏捷诊断工具 obdiag 使用帮助链接

2 个赞

没碰到过,坐等大家的回答

3 个赞

打卡打卡

2 个赞

目前是哪个下游出问题了么?还是?

2 个赞

下游解析Obbinlog插件转换的binlog的ddl时候出错了,有特殊语法解析不了。设置了过滤,关闭了tsdb数据库。还是会报ddl解析报错。过滤不掉。导致canal解析一直在占用cpu。

2 个赞

canal版本使用的是canal.deployer-1.1.8,obbinlog使用的是obbinlog-ce-4.3.4-100000142025112018.el7.x86_64.rpm。

2 个赞

能知道转化的哪些DDL报错么?canal日志具体报错信息 是什么?使用的是原生canal是吧

2 个赞

原生canal

2 个赞

具体的报错信息是这样

2026-07-02 11:30:28.369 [destination = example , address = /192.168.17.121:2883 , EventParser] WARN  c.a.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta - parse faield : CREATE TABLE `RES_LOGIC_GSMR_CELL` (
  `CELL_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs NOT NULL COMMENT '小区ID;外键关联RES_RESOURCE_SUMMARY表ID_',
  `ORI_IDENTI_` varchar(255) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '资源原始标识',
  `DEVICE_NO_` varchar(50) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '设备编码',
  `DEVICE_CODE_` varchar(50) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '单元识别码',
  `EMSID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '网管ID',
  `ALIAS_` varchar(255) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '资源别名',
  `NAME_` varchar(255) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '资源名称',
  `DELETE_STATE_` decimal(1,0) DEFAULT NULL COMMENT '删除状态(0-删除)',
  `REGION_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '区域ID',
  `MODEL_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '资源型号ID',
  `RES_TYPE_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '资源类型ID',
  `RES_MANU_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '厂商ID',
  `HARD_VERSION_` varchar(64) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '硬件版本',
  `SOFTWARE_VERSION_` varchar(500) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '软件版本',
  `IP_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '设备IP',
  `HOUSE_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '机房ID',
  `STA_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '站点ID',
  `RAILWAY_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '铁路线',
  `ONLINE_DATE_` datetime DEFAULT NULL COMMENT '设备开通时间',
  `INSERT_TIME_` datetime NOT NULL COMMENT '首次入库时间',
  `LAST_UPDATE_TIME_` datetime DEFAULT NULL COMMENT '最后更新时间',
  `LAST_COLLECT_TIME_` datetime DEFAULT NULL COMMENT '最后采集时间',
  `BELONG_BTS_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '所属BTS ID',
  `CELL_NO_` varchar(255) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '小区序号',
  `CGI_` varchar(200) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '小区全球标识',
  `CI_` decimal(10,0) DEFAULT NULL COMMENT '小区识别码',
  `LAC_` decimal(10,0) DEFAULT NULL COMMENT '位置区码',
  `MCC_` decimal(10,0) DEFAULT NULL COMMENT '移动设备国家代码',
  `MNC_` decimal(10,0) DEFAULT NULL COMMENT '移动设备网络代码',
  `RAC_` decimal(10,0) DEFAULT NULL COMMENT '路由去编码',
  `NCC_` decimal(10,0) DEFAULT NULL COMMENT '网络色码',
  `BCC_` decimal(10,0) DEFAULT NULL COMMENT '信道编码',
  `CRO_` varchar(20) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '小区重选偏置(步长)',
  `CELL_ALLOCATION_` decimal(10,0) DEFAULT NULL COMMENT '小区分配',
  `HOPPING_SEQUENCE_NUM_` decimal(10,0) DEFAULT NULL COMMENT '跳频序列号',
  `MSTXPWRMAXCCH_` decimal(10,0) DEFAULT NULL COMMENT '控制信道最大功率电平',
  `PLMN_PERMITTED_` decimal(10,0) DEFAULT NULL COMMENT '公共陆地移动网络许可',
  `RXLEV_ACCESS_MIN_` decimal(10,0) DEFAULT NULL COMMENT '移动台允许接入的最小接收电平(dBm)',
  `TRX_NUM_` decimal(10,0) DEFAULT NULL COMMENT '载频数',
  `AFC1_POWER_` varchar(20) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '载频AFC1功率',
  `AFC2_POWER_` varchar(20) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '载频AFC2功率',
  `AFC3_POWER_` varchar(20) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '载频AFC3功率',
  `AFC4_POWER_` varchar(20) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '载频AFC4功率',
  `AFC1_` varchar(20) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '载频分配AFC1',
  `AFC2_` varchar(20) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '载频分配AFC2',
  `AFC3_` varchar(20) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '载频分配AFC3',
  `AFC4_` varchar(20) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '载频分配AFC4',
  `POWER_BUDGET_` int(11) DEFAULT NULL COMMENT '是否允许功率预算切换;枚举:0 否;1 是。',
  `HANDOVER_TOLERANCE_` decimal(10,0) DEFAULT NULL COMMENT '切换容限(dB)',
  `PPHANDOVER_PROTECTTIME_` int(11) DEFAULT NULL COMMENT '乒乓切换保护时间(秒)',
  `HANDOVER_JUDGMENT_` int(11) DEFAULT NULL COMMENT '切换判决(次)',
  `DISTANCE_HANDOVER_THR_` decimal(10,0) DEFAULT NULL COMMENT '距离切换门限',
  `DOWNLINK_QLTY_ACC_THR_` decimal(10,0) DEFAULT NULL COMMENT '下行质量接收门限',
  `DOWNLINK_EDGEHANDOVER_THR_` decimal(10,0) DEFAULT NULL COMMENT '下行链路边缘切换门限(dBm)',
  `UPLINK_EDGEHANDOVER_THR_` decimal(10,0) DEFAULT NULL COMMENT '上行链路边缘切换门限(dBm)',
  `UPLINK_QLTY_ACC_THR_` decimal(10,0) DEFAULT NULL COMMENT '上行质量接收门限',
  `INTERFERE_HANDOVER_` int(11) DEFAULT NULL COMMENT '干扰切换算法允许;枚举:0 否;1 是。',
  `FAST_HANDOVER_` int(11) DEFAULT NULL COMMENT '快速切换算法允许;枚举:0 否;1 是。',
  `BQ_HANDOVER_` int(11) DEFAULT NULL COMMENT 'BQ切换算法允许;枚举:0 否;1 是。',
  `USERLABEL_` decimal(10,0) DEFAULT NULL COMMENT '用户标签',
  `GPDPDTCHA_` decimal(16,0) DEFAULT NULL COMMENT '小区的动态PDCH信道数',
  `T3101_` decimal(10,0) DEFAULT NULL COMMENT '定时器参数T3101',
  `T3103_` decimal(10,0) DEFAULT NULL COMMENT '定时器参数T3103',
  `T3107_` decimal(10,0) DEFAULT NULL COMMENT '定时器参数T3107',
  `T3109_` decimal(10,0) DEFAULT NULL COMMENT '定时器参数T3109',
  `T3122_` decimal(10,0) DEFAULT NULL COMMENT '定时器参数T3122',
  `RLT_` decimal(10,0) DEFAULT NULL COMMENT '无线链路超时(秒)',
  `LAYER_` int(11) DEFAULT NULL COMMENT '层级',
  `REMARK_` varchar(255) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`CELL_ID_`),
  KEY `CELL_ID_` (`CELL_ID_`) BLOCK_SIZE 16384 LOCAL,
  KEY `BELONG_BTS_ID_` (`BELONG_BTS_ID_`) BLOCK_SIZE 16384 LOCAL
) ORGANIZATION INDEX DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_as_cs ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE ENABLE_MACRO_BLOCK_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 COMMENT = '小区资源信息表'
com.alibaba.polardbx.druid.sql.parser.ParserException: syntax error, error in :'16384 LOCAL,
  KEY `BELONG_BTS_ID_` ', expect ), actual null, pos 5950, line 72, column 49, token IDENTIFIER LOCAL
	at com.alibaba.polardbx.druid.sql.parser.SQLParser.printError(SQLParser.java:531)
	at com.alibaba.polardbx.druid.sql.parser.SQLParser.accept(SQLParser.java:545)
	at com.alibaba.polardbx.druid.sql.dialect.mysql.parser.MySqlCreateTableParser.parseCreateTable(MySqlCreateTableParser.java:609)
	at com.alibaba.polardbx.druid.sql.dialect.mysql.parser.MySqlStatementParser.parseCreate(MySqlStatementParser.java:825)
	at com.alibaba.polardbx.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:578)
	at com.alibaba.polardbx.druid.sql.SQLUtils.parseStatements(SQLUtils.java:451)
	at com.alibaba.polardbx.druid.sql.repository.SchemaRepository.console(SchemaRepository.java:480)
	at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta.apply(MemoryTableMeta.java:86)
	at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.dumpTableMeta(DatabaseTableMeta.java:243)
	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:144)
	at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$1.run(AbstractEventParser.java:192)
	at java.lang.Thread.run(Thread.java:750)
2026-07-02 11:30:28.371 [destination = example , address = /192.168.17.121:2883 , EventParser] WARN  c.a.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta - parse faield : CREATE TABLE `RES_PHY_GSMR_BSC` (
  `BSC_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs NOT NULL COMMENT '设备id',
  `CAPACITY_` decimal(10,0) DEFAULT NULL COMMENT 'BSC容量',
  `BSC_BHCA_` decimal(10,0) DEFAULT NULL COMMENT 'BSC设计的BHCA值',
  `BTS_NUM_` decimal(10,0) DEFAULT NULL COMMENT 'Bsc可带bts数目',
  `SP_LINK_NUM_` decimal(10,0) DEFAULT NULL COMMENT '信令链路数',
  `LOCAL_SP_INFO_` varchar(255) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '本地信令点信息',
  `MAX_VOCODERNUM_SUM_` decimal(10,0) DEFAULT NULL COMMENT '最大声码器总数',
  `OCCUPY_2MTRUNMK_PORTNUM_` decimal(10,0) DEFAULT NULL COMMENT '2M中继端口占有数',
  `OCCUPY_64KSIG_NUM_` decimal(10,0) DEFAULT NULL COMMENT '64K信令终端占有数',
  `PCF_LIST_` decimal(10,0) DEFAULT NULL COMMENT 'Pcf列表;与该BSC相关联的PCF列表,若在BSC中实现了PCF功能(即PCF是BSC中的一个模块),则该属性值为空,否则为DN的列表。',
  `PCU_CONF_NUM_` decimal(10,0) DEFAULT NULL COMMENT 'PCU配置个数',
  `TRUNK_PORT_MAXNUM_` decimal(10,0) DEFAULT NULL COMMENT '中继端口数',
  `TRUNK_PORT_NOWNUM_` decimal(10,0) DEFAULT NULL COMMENT '已配置中继端口数',
  `BELONG_MSC_ID_M_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '所属主MSC ID',
  `BELONG_MSC_ID_B_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '所属备MSC ID',
  `ORI_IDENTI_` varchar(255) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '资源原始标识',
  `DEVICE_NO_` varchar(50) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '设备编码',
  `DEVICE_CODE_` varchar(50) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '单元识别码',
  `EMSID_` varchar(32) COLLATE utf8mb4_0900_as_cs NOT NULL COMMENT '网管ID',
  `ALIAS_` varchar(255) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '资源别名',
  `NAME_` varchar(255) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '资源名称',
  `DELETE_STATE_` decimal(1,0) DEFAULT NULL COMMENT '删除状态(0-删除)',
  `REGION_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '区域ID',
  `MODEL_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '资源型号ID',
  `RES_TYPE_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '资源类型ID',
  `RES_MANU_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '厂商ID',
  `HARD_VERSION_` varchar(64) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '硬件版本',
  `SOFTWARE_VERSION_` varchar(500) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '软件版本',
  `IP_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '设备IP',
  `HOUSE_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '机房ID',
  `STA_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '站点ID',
  `RAILWAY_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '铁路线',
  `RAIL_ADMIN_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '所属路局',
  `ONLINE_DATE_` datetime DEFAULT NULL COMMENT '设备开通时间',
  `INSERT_TIME_` datetime NOT NULL COMMENT '首次入库时间',
  `LAST_UPDATE_TIME_` datetime DEFAULT NULL COMMENT '最后更新时间',
  `LAST_COLLECT_TIME_` datetime DEFAULT NULL COMMENT '最后采集时间',
  `REMARK_` varchar(255) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`BSC_ID_`),
  UNIQUE KEY `BSC_ID_` (`BSC_ID_`) BLOCK_SIZE 16384 LOCAL
) ORGANIZATION INDEX DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_as_cs ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE ENABLE_MACRO_BLOCK_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 COMMENT = 'BSC设备信息表'
com.alibaba.polardbx.druid.sql.parser.ParserException: syntax error, error in :'16384 LOCAL
) ORGANIZATION INDEX DEF', expect ), actual null, pos 3457, line 41, column 54, token IDENTIFIER LOCAL
	at com.alibaba.polardbx.druid.sql.parser.SQLParser.printError(SQLParser.java:531)
	at com.alibaba.polardbx.druid.sql.parser.SQLParser.accept(SQLParser.java:545)
	at com.alibaba.polardbx.druid.sql.dialect.mysql.parser.MySqlCreateTableParser.parseCreateTable(MySqlCreateTableParser.java:609)
	at com.alibaba.polardbx.druid.sql.dialect.mysql.parser.MySqlStatementParser.parseCreate(MySqlStatementParser.java:825)
	at com.alibaba.polardbx.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:578)
	at com.alibaba.polardbx.druid.sql.SQLUtils.parseStatements(SQLUtils.java:451)
	at com.alibaba.polardbx.druid.sql.repository.SchemaRepository.console(SchemaRepository.java:480)
	at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta.apply(MemoryTableMeta.java:86)
	at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.dumpTableMeta(DatabaseTableMeta.java:243)
	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:144)
	at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$1.run(AbstractEventParser.java:192)
	at java.lang.Thread.run(Thread.java:750)

建表语句中的ROW_FORMAT = DYNAMIC COMPRESSION = ‘zstd_1.3.8’ REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE ENABLE_MACRO_BLOCK_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728,这些语法解析不了。

目前是canal端做了过滤处理,把这些特殊语法过滤掉,不知道后续会不会出现其他问题。

过滤完之后的建表语句,不报错。

CREATE TABLE `gsmr-mysql`.`ALM_LIST` (
  `ID_` varchar(32) COLLATE utf8mb4_0900_as_cs NOT NULL COMMENT '主键',
  `SPEC_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '专业主键',
  `EMS_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '网管主键',
  `ALM_LEVEL_ID_` int(11) DEFAULT NULL COMMENT '告警级别主键',
  `ALM_TYPE_ID_` int(11) DEFAULT NULL COMMENT '告警类型主键',
  `ALM_OBJECT_` text COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '告警对象原始标识',
  `DEVORI_` text COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '告警网元原始标识',
  `ALM_DESC_` text COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '告警描述',
  `ALM_NAME_` text COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '告警名称',
  `NAME_DESC_` varchar(768) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '告警名称描述',
  `ALM_CODE_` text COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '告警编号',
  `OCCUR_TIME_` datetime DEFAULT NULL COMMENT '告警发生时间',
  `EMS_TIME_` datetime DEFAULT NULL COMMENT 'EMS告警发生时间',
  `ALM_EMS_OID_` text COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT 'EMS告警序号',
  `ALM_ORI_` text COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '告警唯一标识',
  `CONFIRM_STATUS_` int(11) DEFAULT NULL COMMENT '确认状态(0-未确认1-已确认)',
  `CONFRIM_TIME_` datetime DEFAULT NULL COMMENT '确认时间(ms)',
  `CONFIRM_USERNAME` text COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '确认人',
  `EMS_CONFIRM_STATE_` int(11) DEFAULT NULL COMMENT '子系统确认状态(0-未确认1-已确认)',
  `EMS_CONFIRM_TIME_` datetime DEFAULT NULL COMMENT '子系统确认时间',
  `RESUME_STATE_` int(11) DEFAULT NULL COMMENT '恢复状态(0-未恢复1-已恢复)',
  `RESUME_TIME_` datetime DEFAULT NULL COMMENT '恢复时间(ms)',
  `DELETE_STATE_` int(11) DEFAULT '0' COMMENT '删除状态(0-未删除1-已删除)',
  `DELETE_TIME_` datetime(3) DEFAULT NULL COMMENT '删除时间(ms)',
  `DELETE_USER_` text COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '删除人',
  `INSERT_TIME_` datetime(3) DEFAULT NULL COMMENT '入库时间(ms)',
  `BROADCAST_SIGN_` int(11) DEFAULT NULL COMMENT '持续播报标记',
  `ALM_SUMMARIZE_` text COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '障碍分析结论',
  `ROOT_ALM_ID_` varchar(32) COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '根源告警ID',
  `ROOT_DERIVED_` int(11) DEFAULT NULL COMMENT '根源/衍生告警标记(0-根;1-衍)',
  `ALMSN_` text COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '本网管告警顺序号',
  `BUS_NAME_` text COLLATE utf8mb4_0900_as_cs DEFAULT NULL COMMENT '告警影响业务名称(多个英文逗号分割)',
  PRIMARY KEY (`ID_`),
  UNIQUE KEY `ID_` (`ID_`) ,
  KEY `EMS_ID_` (`EMS_ID_`) ,
  KEY `SPEC_ID_` (`SPEC_ID_`) ,
  KEY `DELETE_STATE_` (`DELETE_STATE_`) ,
  KEY `ALM_TYPE_ID_` (`ALM_TYPE_ID_`) ,
  KEY `ALM_LEVEL_ID_` (`ALM_LEVEL_ID_`) ,
  KEY `DELETE_TIME_` (`DELETE_TIME_`) ,
  KEY `ALM_OBJEC_INDEX` (`ALM_OBJECT_`(32)) 
) DEFAULT CHARSET=utf8mb4         COMMENT = '告警清单表';
2 个赞

ob集群上查看一下 这个变量 show variables like ‘%_show_ddl_in_compat_mode%’;

3 个赞


查的这个是OFF,是不是改成1就可以适配mysql的ddl了。
昨天再兼容说明里边看见了。

1 个赞

下游程序出问题了?

2 个赞
# 开启后,OceanBase 的 show create table 输出将完全兼容 MySQL 的语法。
alter proxyconfig set init_sql='set _show_ddl_in_compat_mode = 1;';
1 个赞

obproxy 是2983端口,obbinlog使用的是代理连接2883,在那个上边修改呢?修改完之后是转换成的binlog日志里边的dll语句,自动就转成mysql适配的语法,还是说还是canal识别到的是OB特有语句还需要手动去转换成mysql适配的语法。

下游canal,解析ddl的时候报错了。解析不了OB特有的语法

ob那边会自动转化成mysql完全兼容的语法 你在下游解析binlog日志的时候 就不会有问题了

1 个赞

最后一个疑问,这个配置是在哪里修改的呢?OBproxy,ODP,还是业务租户?


怎么取查看是否生效呢?