obbinlog 服务部署后,binlog信息一直不变

【 使用环境 】生产环境
【 OB or 其他组件 】OB binlog
【 使用版本 】4.2.3
【问题描述】按照官方文档部署配置后,通过ODP连接租户后,使用SHOW MASTER STATUS能查看到binlog的信息,但是执行创建库或者删除库操作后,binlog位置信息不变。部署配置完全按照文档进行,日志也没有发现什么明显报错。

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

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

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

1 个赞

根因分析场景: DDL失败
根因分析命令: obdiag rca run --scene=ddl_failure
日志采集场景: 日志归档问题
日志采集命令: obdiag gather scene run --scene=observer.log_archive

为了更好地帮助您排查和解决问题,建议使用上述 obdiag 工具进行根因分析和日志采集,并将采集到的日志提供给我们以便确认问题所在。

请您提供一些额外信息以便我们更好地帮助您:

  1. 您是否在执行创建库或删除库操作时遇到了具体的错误信息?如果有,请提供详细的错误信息。
  2. 您的 OceanBase 数据库版本是什么?
  3. Binlog 部署的具体配置是否可以提供?例如是否有特殊参数设置。
  4. 在执行创建库或删除库操作前后,Binlog 的位置信息是否有任何变化?您是如何发现位置信息未更新的?
  5. 是否有其他相关的日志或监控指标异常情况可以提供?

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

1 个赞

不是DDL的问题哦 ,是为啥执行执行ddl后,binlog的pos没变。

1 个赞

,看着确实不符合预期,发下日志吧,尽可能提供一些信息,大佬们才能一起定位问题,然后我才可以在旁边偷偷学习 :crazy_face:

1 个赞

找到的日志就这点:
[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 个赞

根据您的问题描述以及提供的信息,您在执行 DDL 操作后发现 binlog 的位置(Pos)没有发生变化。以下是可能的原因分析及解决建议:


1. OceanBase Binlog 的生成机制

OceanBase 的 Binlog 是基于事务日志(clog)生成的,只有当事务提交成功时,Binlog 才会被写入并更新位置信息。如果 DDL 操作未产生实际的数据变更或未正确提交,可能会导致 Binlog 的位置未更新。

可能原因:

  • DDL 操作未生效:某些 DDL 操作可能由于权限不足、语法错误或其他原因未成功执行。
  • Binlog 配置问题:如果 Binlog 的生成被限制或关闭,可能导致 Binlog 不记录 DDL 操作。

解决方法:

  • 确认 DDL 操作是否成功执行,可以通过查询系统表 __all_table__all_tenant 等确认相关对象是否存在。
  • 检查 Binlog 的配置参数,确保启用了 Binlog 功能:
    SHOW VARIABLES LIKE 'binlog_row_image';
    SHOW VARIABLES LIKE 'ob_enable_binlog';
    
    • 如果 ob_enable_binlog 的值为 OFF,需要将其设置为 ON
      SET GLOBAL ob_enable_binlog = ON;
      

2. Binlog 的生成范围

OceanBase 的 Binlog 默认仅记录 DML 操作(如 INSERTUPDATEDELETE),对于某些 DDL 操作可能不会生成 Binlog。

可能原因:

  • 某些 DDL 操作(如创建库或删除库)可能未被记录到 Binlog 中。
  • 根据文档片段中的说明,OceanBase 支持同步 DDL 的范围有限(参见 数据迁移/同步 DDL 的支持范围和使用限制),部分 DDL 操作可能不在支持范围内。

解决方法:

  • 确认当前 DDL 操作是否在 Binlog 支持范围内。
  • 如果需要同步 DDL 操作,可以考虑使用 OMS 工具,并在创建迁移项目时勾选“同步 DDL”选项(参考文档片段 2)。

3. Binlog 的刷新机制

OceanBase 的 Binlog 刷新可能存在延迟,尤其是在低负载场景下,Binlog 的位置更新可能不会立即反映。

可能原因:

  • Binlog 的刷新频率较低,导致位置信息未及时更新。
  • 当前租户的 Binlog 生产量较少,可能未触发刷新。

解决方法:

  • 执行一些简单的 DML 操作(如插入一条测试数据),观察 Binlog 的位置是否更新:
    CREATE TABLE test_binlog (id INT PRIMARY KEY, name VARCHAR(255));
    INSERT INTO test_binlog VALUES (1, 'test');
    SHOW MASTER STATUS;
    

4. 版本兼容性问题

您提到使用的 OceanBase 版本为 4.2.3,可能存在版本相关的 Bug 或功能限制。

可能原因:

  • 在特定版本中,Binlog 对 DDL 操作的支持可能存在限制或 Bug。
  • 版本升级后,某些默认配置可能发生了变化。

解决方法:

  • 检查是否有针对该版本的已知问题或补丁。
  • 如果问题持续存在,建议联系 OceanBase 技术支持团队获取进一步帮助。

5. 诊断工具的使用

为了进一步排查问题,建议使用以下工具和命令收集相关信息:

  • obdiag 工具:采集日志和诊断信息,帮助定位问题。
    obdiag gather scene run --scene=observer.log_archive
    
  • 检查 Binlog 状态
    SHOW BINLOG EVENTS;
    
  • 检查系统变量和参数
    SHOW VARIABLES LIKE '%binlog%';
    SHOW GLOBAL VARIABLES LIKE 'ob_enable_binlog';
    

总结

根据上述分析,您可以按照以下步骤逐步排查问题:

  1. 确认 DDL 操作是否成功执行。
  2. 检查 Binlog 的配置参数,确保启用了 Binlog 功能。
  3. 确认当前 DDL 操作是否在 Binlog 支持范围内。
  4. 执行一些简单的 DML 操作,观察 Binlog 的位置是否更新。
  5. 使用诊断工具收集日志和信息,进一步排查问题。

如果以上方法仍无法解决问题,建议联系 OceanBase 技术支持团队以获取更专业的帮助。

详情请参考:

  1. 5000 ~ 5999
  2. 通过 OMS 进行数据迁移和同步
  3. 集群管理 FAQ
  4. 闪回查询
  5. 并行执行分类与优化
  6. binlog_row_image
  7. 4000 ~ 4499
  8. Online DDL 和 Offline DDL 操作
  9. 6000 ~ 6999

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

这个变量是什么组件的,我找OB上没有查询到这个变量。

@辞霜 @淇铭 大佬给看看呢。

ob数据库的版本 是多少

4.3.2.1

SHOW MASTER STATUS;
SHOW BINLOG INSTANCES;


把这四个日志文件发一下
binlog_instance.log
libobcdc.log
logproxy.log
obproxy.log

obproxy.log.tar.gz (17.2 MB)
binlog_instance.log.tar.gz (11.6 MB)
libobcdc.log.tar.gz (16.6 MB)
logproxy.log (682 字节)

有结果了没?


看着是 端口被占用了 没有办法绑定 logproxy退出了

这个我当时安装的时候,我把supervisor的两个ini文件都复制过去导致的 后面我把oblogproxy.ini给移除重启这个报错就没有了

后来 你重新启动binlog服务了么?

重启过的。

你直连查看一下 这个信息
SHOW BINLOG SERVER FOR TENANT cluster.tenant;
logproxy.log 日志在提供一下