oceanbase是完全兼容MySQL协议的,之前的文章中也提起到过,所以oceanbase的连接方式也是跟MySQL一样的,需要安装MySQL客户端,采用ip+端口+用户@tenant+密码的方式链接。
mysql -h -uxxxx@tenant -pxxxx -P8306
-h ob集群所在VIP
-u@tenant 用户以及租户名字
-p 密码
-P 端口
之前遇到个用户无法连接到ob数据库问题,报错如下:
[ftpuser@fuggr~]mysql -h -uxxxx -pxxxx -p8306
warning: using a password on the command line interface can be insecure.
ERROR 2003:can't connect to mysql server on 'IP'
哪种数据库都可能出现连接不到数据库的情况,可能是集群挂了,可能是网络有问题,我们看一下这是啥问题。
首先oceanbase是采用集群,如下图,总共有三个副本,也就是三个zone。zone内由不同的server组成,而连接这些server对外提供服务的是通过外面的proxy。
而这有可能是obproxy的启动方式问题,proxy不是通过configg server url启动的, 直接使用rs list启动的,所以用户登录时, 要么不指定集群名登录(proxy使用默认的obcloud), 或者使用obcloud集群登录。
1. client通过proxy访问ob时, 如果proxy后端只有一个集群, 可以用户为username@tenantname, 如果是多个集群, 需要指定集群名;
2. 假定用户传入的集群名为A, 那么Proxy首先从config server url的json内容中查找是否有该集群, 如果有则登录该集群observer
3. proxy在集群名校验开关打开的情况下(默认开), 访问observer时校验用户传入的集群名和ob的集群名是否一致, 不一致报错。
ob连接数据库其实需要输入的信息较MySQL来说只是多了一个tenant,,因为在ob里面资源划分是按照租户为粒度来划分的,每个租户资源是隔离的,也就是说这块资源当初划分给了一个租户,那么这个租户就会独占这部分资源,即使别的租户这时候cpu用满了,也不可以使用到另外一个租户的资源。
既然拥有MySQL一样的命令行连接方式,那么大部分的MySQL客户端工具也是可以连接oceanbase的。比如navicate等等的。
希望大家都可以弄个云端的ob搞一搞玩一玩。