GBase 8a当出现主副本不一致时,会记录event,信息里ObjectName包含了库和表的名字,比如db1.Table1这样。本文介绍一个建库故障,导致只有一个字符串的情况。
目录导航
现场样例
如下的ddlevent, ObjectName是 strace, 并不是常见的格式。而这个strace又不是数据库自带的元数据表。
排查
根据eventId 45367 查看gcluster的express.log, 这个日志会记录45367这个event是什么原因产生的。
通过grep确实找到了故障发生的时间点,然后查看这个时间段发生了什么
可以看到,是一个create database的SQL, 而库名是strace. 报错的原因是 (errno: 17)
查看linux操作系统错误码,错误17是File exists 文件已经存在。
登录集群,确实能看到有这个库,但无法使用(use)
换其它节点连接,发现并没有这个库。初步判断是第一个节点有残留。
进入第一个节点的管理节点的userdata/gcluster目录下,确实发下了一个strace目录。而其它管理节点和数据节点全部没有。
手工删除这个目录,一切恢复。
总结
客户环境出现过故障,怀疑在执行DDL时,没有执行完毕,出现了死机或者断电类故障,导致目录残留。