南大通用数据库-Gbase-8a-报错集锦-02-metadata is incomplete on localhost

 一、版本信息

名称
CPUIntel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz
操作系统CentOS Linux release 7.9.2009 (Core)
内存3G
逻辑核数2
Gbase8a版本8.6.2-R43

二、问题原因

由于gbase.table_distribution存储了所有引擎为express的表元数据信息,如果此表出现数据损坏,会导致本地调度节点无法获取表信息,在select、drop等操作时,将提示metadata is incomplete on localhost。但desc、show create table语句还是可以执行成功的。

三、gbase.table_distribution介绍

gbase> select index_name,dbName,tbName,isReplicate,hash_column,is_nocopies,data_distribution_id from gbase.table_distribution limit 10;
+-------------------------------+------------+--------------------+-------------+-------------+-------------+----------------------+
| index_name                    | dbName     | tbName             | isReplicate | hash_column | is_nocopies | data_distribution_id |
+-------------------------------+------------+--------------------+-------------+-------------+-------------+----------------------+
| gclusterdb.nodedatamap        | gclusterdb | nodedatamap        | YES         | NULL        | NO          |                    1 |
| gclusterdb.rebalancing_status | gclusterdb | rebalancing_status | NO          | index_name  | NO          |                    1 |
| gclusterdb.dual               | gclusterdb | dual               | YES         | NULL        | NO          |                    1 |
| czg.hash_tb_like              | czg        | hash_tb_like       | NO          | NULL        | NO          |                    1 |
| czg.testtab                   | czg        | testtab            | NO          | NULL        | NO          |                    1 |
| czg.a                         | czg        | a                  | NO          | NULL        | NO          |                    1 |
| czg.b                         | czg        | b                  | NO          | NULL        | NO          |                    1 |
| czg.testtab_copy              | czg        | testtab_copy       | NO          | NULL        | NO          |                    1 |
| czg.test_table                | czg        | test_table         | NO          | NULL        | NO          |                    1 |
| czg.test_table_1              | czg        | test_table_1       | NO          | NULL        | NO          |                    1 |
+-------------------------------+------------+--------------------+-------------+-------------+-------------+----------------------+
10 rows in set (Elapsed: 00:00:00.00)
列名含义
index_name库名和表名组合,主键的作用。
dbName库名。
tbName表名。
isReplicate复制表的标记。
hash_column哈希分布表数据分布列。
is_nocopiesnocopy表的标记。
data_distribution_id表数据分部信息的 ID。

四、解决方法

1、多调度节点

我这边是出现了一个是一个DDL EVENT,查看gc_recover.log过一段时间会自动修复DDL EVENT。

 如果没有立马恢复,例如你查的是一节点出的错误,可以换到二节点,也可以正常查询,因为二节点的gbase.table_distribution元数据没有损坏。

2、一个调度节点

一个调度节点无法自动修复,只能手动删除相应event,我这边是DDLevent,所以用下面方法,其他的event要调用相应的方法。

我们先查看存在哪些ddl event,调用gcware.getddlfevents()获取。

[gbase@czg2 Graph]$ python
Python 2.7.5 (default, Jun 28 2022, 15:30:04) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import gcware
>>> gcware.getddlfevents()
({'eventid': 3, 'comment': '', 'distributionid': 1, 'tablename': 
'test.t', 'delayTag': 0, 'content': 
'\x01\x00\x02\x00\x01\x00\x02\x00\xe9\x00\x00\x00\xd2\x05\x00test\x0
0\x02\x00t\x00\x01\x00\x03\x00b\xc0\xa8\x06\xe8\x16\x00\x01\x00\x12\
x19\x07\x00\x00\x19\x00\x11\x02\x19\x00\x17\x03\x15\x00\x07\x1d\x00\
x00\x1b\x00S\x02\x00\x00\x00\x180\x00\x07\x1b\x00\xf3\x93\x9e\x00\x0
0\x00CREATE GCLUSTER_LOCAL TABLE /*+ sub_step,distribution(1) */ 
"test"."TNAME_00-1D-7D-C7-A5-17" (\n"a" INT(11) DEFAULT NULL\n) 
TID_00-1D-7D-C7-A5-17 UID(1) 
\x00\xb4\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'tableid': 22, 
'datacopyids': ({'segid': 3, 'nodeipaddr': '192.168.6.232', 'nodeid':
3892750528, 'segname': 'n3'}, {'segid': 2, 'nodeipaddr': 
'192.168.6.232', 'nodeid': 3892750528, 'segname': 'n2'}), 
'nodecopyids': ({'nodeipaddr': '192.168.6.232', 'nodeid': 
3892750528},), 'tabletype': 'DISTRIBUTION'},)
clearddlfevent(regex)介绍点描述
实现功能将符合正则表达式条件的表名对应的 ddl event 清除掉。
参数regex:用正则表达式描述的表名。
返回值被删除的 event 个数。
>>> gcware.clearddlfevent('test.t')
1

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值