【 使用环境 】测试环境
【 OB or 其他组件 】Oceanbase Binlog Service
【 使用版本 】
1、oceanbase 4.2.3.1
2、obproxy 4.3.2
3、ob binlog service 4.0.1
【问题描述】
1、部署ob binlog service服务,通过binlog servcie配置,无问题,且确认binlog日志正常生成;
2、接入canal,启动instance,报错“CanalParseException: command : ‘show master status’ has an error”,截图如下。
3、通过2883端口访问,确实报语法错误。
截图2,
截图3,
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
论坛小助手
#3
根据您提供的信息,您在使用 Canal 访问 OceanBase Binlog Service 时遇到了 CanalParseException
错误,具体错误信息为 command : 'show master status' has an error
。此外,您还提到通过 2883 端口访问时也出现了相同的语法错误。
分析与解决方案
-
错误原因:
-
show master status
是 MySQL 中用于显示主服务器二进制日志文件的状态的命令。然而,OceanBase 并不支持这个命令,因此会导致语法错误。
- 在 OceanBase 中,获取类似信息的方式有所不同。
-
解决方案:
-
使用 OceanBase 的替代命令:
-
配置 Canal:
- 由于 Canal 依赖于
show master status
命令来获取二进制日志的位置,您需要对 Canal 进行一些配置调整,使其能够适应 OceanBase 的环境。
- 一种可能的解决方案是修改 Canal 的配置文件,使其能够正确解析 OceanBase 的日志信息。具体步骤如下:
- 打开 Canal 的配置文件
canal.properties
。
- 找到并修改
canal.instance.master.address
配置项,确保其指向正确的 OceanBase 地址和端口。
- 修改
canal.instance.dbUsername
和 canal.instance.dbPassword
,确保使用具有足够权限的用户。
- 如果需要,可以添加自定义的 SQL 查询来获取日志位置信息,并在 Canal 的配置中指定这些查询。
-
验证:
- 在完成上述配置后,重新启动 Canal 实例,检查是否仍然出现相同的错误。
- 如果问题仍然存在,建议使用
obclient
工具手动执行 SHOW PHYSICAL BACKUP LOG
命令,确保能够正确获取日志信息。
总结
根据文档库中的信息,OceanBase 不支持 show master status
命令。因此,您需要使用 OceanBase 提供的替代命令来获取二进制日志信息,并相应地调整 Canal 的配置。希望这些建议能帮助您解决问题。如果仍有疑问,建议联系 OceanBase 的官方技术支持获取进一步的帮助。
更多信息请查看:
- 4000 ~ 4499
- 0001 ~ 3999
- 900.9000-9499-of-mysql-mode.md
- 4500 ~ 4999
淇铭
#4
1、发一下 observer.log日志 日志比较大 压缩上传一下
感谢老师协助,相关日志已压缩。
observer.log.tar.gz (20.4 MB)
论坛小助手
#6
感谢您上传了日志文件。为了帮助您更好地分析和解决问题,我们可以使用 obdiag
工具来解压和查看这些日志文件。以下是具体步骤:
使用 obdiag
工具解压和查看日志文件
-
安装 obdiag
工具:
如果您还没有安装 obdiag
工具,可以通过以下命令进行安装:
# 下载并安装 obdiag
wget https://mirrors.aliyun.com/oceanbase/obdiag/obdiag_latest.tar.gz
tar -zxvf obdiag_latest.tar.gz
cd obdiag
-
解压日志文件:
使用 obdiag
工具解压日志文件:
./obdiag gather log --tar-file /path/to/observer.log.tar.gz --output-dir /path/to/output
其中 /path/to/observer.log.tar.gz
是您上传的日志文件的路径,/path/to/output
是您希望解压后日志文件存放的目录。
-
查看解压后的日志文件:
解压完成后,您可以使用 cat
、less
或 vim
等工具查看日志文件。例如:
cat /path/to/output/observer.log
查看特定日志内容
如果您需要查看特定的日志内容,可以使用 grep
命令进行搜索。例如,查找包含 CanalParseException
的日志条目:
grep "CanalParseException" /path/to/output/observer.log
示例
假设您已经将日志文件解压到 /tmp/oblogs
目录下,以下是完整的示例命令:
# 安装 obdiag
wget https://mirrors.aliyun.com/oceanbase/obdiag/obdiag_latest.tar.gz
tar -zxvf obdiag_latest.tar.gz
cd obdiag
# 解压日志文件
./obdiag gather log --tar-file /path/to/observer.log.tar.gz --output-dir /tmp/oblogs
# 查看日志文件
cat /tmp/oblogs/observer.log
# 搜索特定日志内容
grep "CanalParseException" /tmp/oblogs/observer.log
分析日志
根据您之前的问题,我们重点关注 CanalParseException
和 show master status
相关的错误信息。通过查看日志文件,我们可以进一步分析问题的具体原因。
如果您在解压和查看日志过程中遇到任何问题,或者需要进一步的帮助,请随时告诉我。希望这些步骤能帮助您解决问题。
检索到的文档如下:
- Alert 日志
- 日志
- 日志压缩与解压
- What’s New
- syslog_compress_func
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)
川粉
#8
https://www.oceanbase.com/docs/community-oblogproxy-doc-1000000001493745#6-title-配置%20OBProxy
最后一步的配置 OBProxy 做了吗?结束之后要用 Binlog 订阅的租户连接 OBProxy 执行 SHOW MASTER STATUS。正常情况下,SHOW MASTER STATUS 应该是在 OBProxy 解析执行的,不应该会发到 observer 上。
老师,你好,最后处理了,报错“OBproxy connected Binlog Service failed”这样,
但是,我本地binlog 是正常生成的。
本地binlog确认有数据。
川粉
#11
命令里面用的是明文密码。
使用 sys 或 proxysys 租户的账号连接 OBProxy,执行 SHOW PROXYCONFIG LIKE 'binlog_service_ip';
有值吗?跟你的 binlog server 部署的服务 IP 和 端口一样不?
如果都正常的话,看下 ODP 的日志,有哪些报错信息。
好的。
SHOW PROXYCONFIG LIKE ‘binlog_service_ip’; 和我们的binlog server部署的服务IP和端口一样的。
1、obproxy 可访问 ob binlog service 2983端口
2、SHOW PROXYCONFIG LIKE ‘binlog_service_ip’;
3、binlog service服务及端口:
ODP日志烦请查阅附件
OBProxy connect binlog service failed.log (759 KB)
川粉
#14
看日志里有这个报错,我让 ODP 的同学看一下
[2024-11-04 14:37:47.944082] WDIAG [LIB] convert_ipv6_addr (ob_addr.cpp:60) [2993261][Y0-00007FFA9156EB70] [lt=0] [dc=0] convert ipv6 addr failed(ip="fe80::5054:ff:fee5:e9cf%eth0 172.18.96.196")
[2024-11-04 14:37:47.944084] WDIAG [PROXY] fetch_binlog_entry (ob_route_utils.cpp:2120) [2993261][Y0-00007FFA9156EB70] [lt=0] [dc=0] invalid ip or port in fetching binlog entry(ret=-4002)
[2024-11-04 14:37:47.944086] WDIAG [PROXY] handle_binlog_entry_resp (ob_table_entry_cont.cpp:658) [2993261][Y0-00007FFA9156EB70] [lt=0] [dc=0] fail to fetch binlog entry info(ret=-4002)
川粉
#16
连接到 Binlog Server,执行这两个命令,看下显示的 IP 对不对。
SHOW BINLOG SERVER FOR TENANT cluster.tenant;
SHOW BINLOG INSTANCES FOR cluster.tenant;
川粉
#17
或者更直接一点,看看 binlog 部署目录的 conf/conf.json 文件里的 node_ip 是不是多了一个 ipv6 的地址。默认的部署脚本会通过 hostname -i 获取节点 ip,在机器有多个网卡时可能会获取到多个值,需要手动修正一下。