一、故障现象
-
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.out和observer进程存活。 -
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