OceanBase 备份失败排查笔记本(CSDU JobId 5861)

一、故障现象

  • CSDU 备份作业 JobId 5861 失败,结束状态:*** 备份错误 ***

  • 客户端数据量:0 (0 B),说明没有实际备份数据

  • 客户端结束状态:Fatal Error

  • 关键错误:

    OceanBase备份任务执行错误,错误信息:参数解析错误:
    oceanbase connect error:(2013, 'Lost connection to MySQL server during query')
    Fatal error: Csdu command error 100 want 0 or 101

二、初步结论

备份失败只是表象,根因是:

OceanBase 核心进程 observer 没有启动,只有 obproxy 在运行。

因此客户端通过 obproxy 连接时,后端没有可用 Observer 节点,连接立即断开,报 2013 Lost connection

容器内验证结果:

ps -ef | grep observer
# 无 observer 进程

netstat -tlnp | grep 2881
# 无 2881 端口监听

tail -f /home/admin/oceanbase/log/observer.out
# 文件不存在,说明 observer 从未成功启动过

三、根因定位

容器内 /usr/local/bin/auto_start_ob.sh 中:

function autostart_ob() {
  if [ -e "/home/admin/oceanbase/bin/observer" ]; then
    ensure_clock
    if [ $? = 0 ]; then
      # 启动 observer
    else
      echo "sync time failed, will not start observer."
    fi
  fi
}

ensure_clock 依赖 ntpd / chronyd。容器环境通常没有时间同步服务,或无法连接外部 NTP,导致 ensure_clock 返回失败,脚本主动跳过 observer 启动

四、立即修复:手动启动 observer

1. 检查文件与目录

ls -l /home/admin/oceanbase/bin/observer
ls -l /home/admin/oceanbase/etc/observer.conf
ls -ld /home/admin/oceanbase/store

2. 手动前台启动 observer

su - admin
cd /home/admin/oceanbase
ulimit -s 10240
ulimit -c unlimited
export LD_LIBRARY_PATH=/home/admin/oceanbase/lib:/usr/local/lib:/usr/lib:/usr/lib64:/usr/local/lib64:$LD_LIBRARY_PATH
export LD_PRELOAD=''
/home/admin/oceanbase/bin/observer
  • 如果终端持续滚动日志:说明启动成功,按 Ctrl+C 停止。

  • 然后改为后台运行:

    mkdir -p /home/admin/oceanbase/log
    nohup /home/admin/oceanbase/bin/observer > /home/admin/oceanbase/log/observer.out 2>&1 &

3. 验证 observer

ps -ef | grep [o]bserver
netstat -tlnp | grep 2881

4. 如果启动失败

查看日志:

tail -n 200 /home/admin/oceanbase/log/observer.out

常见原因:

  • store 目录未初始化

  • observer.conf 缺失或配置错误

  • 端口 2881/2882 被占用

  • 内存不足

  • 数据目录权限不是 admin

注意:如果 store 为空且确认是首次部署,应使用 obd 或官方方式初始化。不要随意执行 --init,否则可能覆盖已有数据。

五、永久修复自动启动

编辑:

vim /usr/local/bin/auto_start_ob.sh

建议把 ensure_clock 改为直接返回成功,避免容器内无 NTP 时跳过 observer:

function ensure_clock() {
  ts_echo "skip clock check in container"
  return 0
}

或者修改 autostart_ob,把 ensure_clock 调用替换为 true,并确保后续 if [ $? = 0 ] 能通过。

修改后保存,后续容器启动时会自动拉起 observer

六、重试备份

当以下条件满足后:

ps -ef | grep [o]bserver     # 有进程
netstat -tlnp | grep 2881    # 2881 LISTEN

重新触发 CSDU 备份作业,观察是否还报:

oceanbase connect error:(2013, 'Lost connection to MySQL server during query')

如果不再报错,备份即可恢复正常。

七、预防措施

  • 容器化 OceanBase 不要强依赖宿主机 NTP/Chrony 启动脚本。

  • 增加启动后健康检查:observer 进程 + 2881 端口。

  • 监控 observer.outobserver 进程存活。

  • CSDU 备份失败时,优先检查 OceanBase 连接,而不是只看备份工具。

八、关键命令速查

# 进入容器
docker exec -it oceanbase_178468962094290_7 bash

# 检查进程
ps -ef | grep [o]bserver
ps -ef | grep [o]bproxy

# 检查端口
netstat -tlnp | grep 2881
netstat -tlnp | grep 2883

# 查看日志
tail -n 200 /home/admin/oceanbase/log/observer.out

# 手动启动 observer
su - admin
cd /home/admin/oceanbase
ulimit -s 10240
ulimit -c unlimited
export LD_LIBRARY_PATH=/home/admin/oceanbase/lib:/usr/local/lib:/usr/lib:/usr/lib64:/usr/local/lib64:$LD_LIBRARY_PATH
export LD_PRELOAD=''
/home/admin/oceanbase/bin/observer

下一步:你当前只完成了检查,还没有手动启动 observer。请先执行“立即修复”中的前台启动命令。如果报错,把 observer.out 或终端完整错误贴出来,继续定位。

上一篇 AnyBackup - 开启重删的云数据库 GaussDB 备份一段时间后报错,执行输出提示"触发追加些备份文件场景"
易读格

易读格管理员

这个人很懒,什么都没有留下。

本月创作热力图

目录
最新评论
暂无评论