GBase 8a V95客户端gccli连接报错No VC selected

在GBase 8a V95版本里,如果开启了虚拟集群功能,则在连接时如果指定了用户数据库,且用户没有配置默认VC,则必须指定所属的VC。否则报错信息就是ERROR 1818 (HY000): No VC selected。

报错样例

如下是gccli登录时,指定了testdb为默认数据库。在V8和没有开启vc功能的V9里,可以正常运行。

[gbase@gbase_rh7_001 ~]$ gccli testdb
ERROR 1818 (HY000): No VC selected.

原因

是因为

查看VC

通过gcadmin查看当前集群的VC情况,如下样例显示有2个vc,名字分别是vc01和vc02。

[gbase@gbase_rh7_001 ~]$ gcadmin
CLUSTER STATE:         ACTIVE

=============================================================
|           GBASE COORDINATOR CLUSTER INFORMATION           |
=============================================================
|   NodeName   | IpAddress  | gcware | gcluster | DataState |
-------------------------------------------------------------
| coordinator1 | 10.0.2.101 |  OPEN  |   OPEN   |     0     |
-------------------------------------------------------------
===========================================================
|            GBASE VIRTUAL CLUSTER INFORMATION            |
===========================================================
|    VcName    | DistributionId |         comment         |
-----------------------------------------------------------
|     vc01     |       1        | first vc with one node  |
-----------------------------------------------------------
|     vc02     |       2        | second vc with one node |
-----------------------------------------------------------

2 virtual cluster: vc01, vc02
1 coordinator node
0 free data node

[gbase@gbase_rh7_001 ~]$

而testdb数据库是属于vc01虚拟集群的,默认的gbase/root数据库用户没有默认VC,所以无法直接访问。

[gbase@gbase_rh7_001 ~]$ gccli -uroot testdb
ERROR 1818 (HY000): No VC selected.
[gbase@gbase_rh7_001 ~]$

如果是系统元数据,比如gbase库和information_schema,不属于vc,则可以直接访问。

[gbase@gbase_rh7_001 ~]$ gccli gbase

GBase client 9.5.2.36.125743. Copyright (c) 2004-2021, GBase.  All Rights Reserved.

gbase> ^CAborted

解决方案

没有默认VC的用户,根据数据库所属vc,指定vc名字和库名。比如 vc01.testdb

[gbase@gbase_rh7_001 ~]$ gccli vc01.testdb

GBase client 9.5.2.36.125743. Copyright (c) 2004-2021, GBase.  All Rights Reserved.

gbase> ^CAborted

有默认VC的用户,可以直接访问,比如testdb用户默认的vc是vc01.

[gbase@gbase_rh7_001 ~]$ gccli -uroot testdb
[gbase@gbase_rh7_001 ~]$ gccli -utestdb -ptestdb

GBase client 9.5.2.36.125743. Copyright (c) 2004-2021, GBase.  All Rights Reserved.

gbase> ^CAborted

总结

GBase 8a的虚拟集群,对管理员带来了使用上的差异,多了vc这一层。

对于普通用户,一般都设置了默认vc,则不会出现这个情况,和使用普通集群无差别。只有在跨VC访问数据时,才需要在SQL语法上进行适配。

参考

GBase 8a集群创建用户create user完整语法