不会写SQL
#1
【 使用环境 】生产环境
【 OB or 其他组件 】OB binlog
【 使用版本 】4.2.3
【问题描述】按照官方文档部署配置后,通过ODP连接租户后,使用SHOW MASTER STATUS能查看到binlog的信息,但是执行创建库或者删除库操作后,binlog位置信息不变。部署配置完全按照文档进行,日志也没有发现什么明显报错。
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
1 个赞
论坛小助手
#3
根因分析场景: DDL失败
根因分析命令: obdiag rca run --scene=ddl_failure
日志采集场景: 日志归档问题
日志采集命令: obdiag gather scene run --scene=observer.log_archive
为了更好地帮助您排查和解决问题,建议使用上述 obdiag 工具进行根因分析和日志采集,并将采集到的日志提供给我们以便确认问题所在。
请您提供一些额外信息以便我们更好地帮助您:
- 您是否在执行创建库或删除库操作时遇到了具体的错误信息?如果有,请提供详细的错误信息。
- 您的 OceanBase 数据库版本是什么?
- Binlog 部署的具体配置是否可以提供?例如是否有特殊参数设置。
- 在执行创建库或删除库操作前后,Binlog 的位置信息是否有任何变化?您是如何发现位置信息未更新的?
- 是否有其他相关的日志或监控指标异常情况可以提供?
附上敏捷诊断工具 obdiag 使用帮助链接
1 个赞
不会写SQL
#4
不是DDL的问题哦 ,是为啥执行执行ddl后,binlog的pos没变。
1 个赞
菜鸟收割机
#5
,看着确实不符合预期,发下日志吧,尽可能提供一些信息,大佬们才能一起定位问题,然后我才可以在旁边偷偷学习 
1 个赞
不会写SQL
#6
找到的日志就这点:
[2025-04-16 20:16:27.501632] [info] environmental.cpp(25): Max file descriptors: 1024
[2025-04-16 20:16:27.501661] [info] environmental.cpp(32): Max processes/threads: 2060868
[2025-04-16 20:16:27.501666] [info] environmental.cpp(39): Core dump size: 18446744073709551615
[2025-04-16 20:16:27.501670] [info] environmental.cpp(46): Maximum number of pending signals: 2060868
[2025-04-16 20:16:27.501703] [error] io.cpp(351): Failed to bind port:2984,error:Address already in use
[2025-04-16 20:16:27.501722] [error] prometheus.cpp(361): Prometheus port [2984] is occupied
[2025-04-16 20:16:27.501725] [error] entry.cpp(126): !!!LogProxy Exit, failed to initialize prometheus Exposer
1 个赞
论坛小助手
#7
根据您的问题描述以及提供的信息,您在执行 DDL 操作后发现 binlog 的位置(Pos
)没有发生变化。以下是可能的原因分析及解决建议:
1. OceanBase Binlog 的生成机制
OceanBase 的 Binlog 是基于事务日志(clog)生成的,只有当事务提交成功时,Binlog 才会被写入并更新位置信息。如果 DDL 操作未产生实际的数据变更或未正确提交,可能会导致 Binlog 的位置未更新。
可能原因:
-
DDL 操作未生效:某些 DDL 操作可能由于权限不足、语法错误或其他原因未成功执行。
-
Binlog 配置问题:如果 Binlog 的生成被限制或关闭,可能导致 Binlog 不记录 DDL 操作。
解决方法:
2. Binlog 的生成范围
OceanBase 的 Binlog 默认仅记录 DML 操作(如 INSERT
、UPDATE
、DELETE
),对于某些 DDL 操作可能不会生成 Binlog。
可能原因:
- 某些 DDL 操作(如创建库或删除库)可能未被记录到 Binlog 中。
- 根据文档片段中的说明,OceanBase 支持同步 DDL 的范围有限(参见 数据迁移/同步 DDL 的支持范围和使用限制),部分 DDL 操作可能不在支持范围内。
解决方法:
- 确认当前 DDL 操作是否在 Binlog 支持范围内。
- 如果需要同步 DDL 操作,可以考虑使用 OMS 工具,并在创建迁移项目时勾选“同步 DDL”选项(参考文档片段 2)。
3. Binlog 的刷新机制
OceanBase 的 Binlog 刷新可能存在延迟,尤其是在低负载场景下,Binlog 的位置更新可能不会立即反映。
可能原因:
- Binlog 的刷新频率较低,导致位置信息未及时更新。
- 当前租户的 Binlog 生产量较少,可能未触发刷新。
解决方法:
4. 版本兼容性问题
您提到使用的 OceanBase 版本为 4.2.3
,可能存在版本相关的 Bug 或功能限制。
可能原因:
- 在特定版本中,Binlog 对 DDL 操作的支持可能存在限制或 Bug。
- 版本升级后,某些默认配置可能发生了变化。
解决方法:
- 检查是否有针对该版本的已知问题或补丁。
- 如果问题持续存在,建议联系 OceanBase 技术支持团队获取进一步帮助。
5. 诊断工具的使用
为了进一步排查问题,建议使用以下工具和命令收集相关信息:
总结
根据上述分析,您可以按照以下步骤逐步排查问题:
- 确认 DDL 操作是否成功执行。
- 检查 Binlog 的配置参数,确保启用了 Binlog 功能。
- 确认当前 DDL 操作是否在 Binlog 支持范围内。
- 执行一些简单的 DML 操作,观察 Binlog 的位置是否更新。
- 使用诊断工具收集日志和信息,进一步排查问题。
如果以上方法仍无法解决问题,建议联系 OceanBase 技术支持团队以获取更专业的帮助。
详情请参考:
- 5000 ~ 5999
- 通过 OMS 进行数据迁移和同步
- 集群管理 FAQ
- 闪回查询
- 并行执行分类与优化
- binlog_row_image
- 4000 ~ 4499
- Online DDL 和 Offline DDL 操作
- 6000 ~ 6999
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)
不会写SQL
#9
这个变量是什么组件的,我找OB上没有查询到这个变量。
淇铭
#13
SHOW MASTER STATUS;
SHOW BINLOG INSTANCES;
淇铭
#15
把这四个日志文件发一下
binlog_instance.log
libobcdc.log
logproxy.log
obproxy.log
不会写SQL
#16
淇铭
#18
看着是 端口被占用了 没有办法绑定 logproxy退出了
不会写SQL
#19
这个我当时安装的时候,我把supervisor的两个ini文件都复制过去导致的 后面我把oblogproxy.ini给移除重启这个报错就没有了
淇铭
#22
你直连查看一下 这个信息
SHOW BINLOG SERVER FOR TENANT cluster.tenant;
logproxy.log 日志在提供一下