本文将为大家总结 OceanBase 集群登录时常见报错“Access denied”的排查步骤。

作者:何文超,爱可生南区交付服务部 DBA 团队成员。主要负责 MySQL 故障处理,MySQL 高可用架构改造,OceanBase 相关技术支持。爱好足球,羽毛球。

爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

本文约 600 字,预计阅读需要 3 分钟。

问题背景

近期,生产环境通过客户端工具可正常连接 OceanBase 集群,但通过黑屏连接登录报错。

报错信息如下:

ERROR 1045 (42000): Access denied for user 'root'@'xxx.xxx.xxx.xxx' (using password: NO)

本文以上述案例为例,为大家总结 OceanBase 集群登录时常见报错“Access denied”的排查步骤。

排查步骤

以下将按照常见原因的发生概率,排序逐一列举。

一、确认用户的密码正确性

请再次确认您使用的用户密码是否正确。

二、检查网络连通性

确保不同网段的服务器能够正常访问 obproxy 的 2883 端口。

telnet <obproxy-ip> 2883

三、检查用户的权限

检查是否具有全局登录权限,以及账号是否被锁定。

// wms 账号登录报错:
[root@10-186-65-73 ~]# mysql -hxxx -P2883 -uwms@hwc_test#hwc_cluster -p"xxx"
ERROR 1045 (42000): Access denied for user 'wms'@'xxx.xxx.xxx.xxx' (using password: YES)

mysql -hxxxx -P2883 -uroot@hwc_test#hwc_cluster -p"xxx"
mysql> select user_name,host,is_locked from oceanbase.__all_user where user_name='wms';
+-----------+-------------+-----------+
| user_name | host        | is_locked |
+-----------+-------------+-----------+
| wms       | 10.186.57.% |         0 |
+-----------+-------------+-----------+
1 row in set (0.01 sec)

四、客户端是否支持

MySQL 客户端

OceanBase 数据库当前版本支持的 MySQL 客户端版本包括 V5.5、V5.6 和 V5.7。

obclient 客户端

确认使用的 obclient 版本与 obproxy 和 OceanBase 集群版本是否兼容。可以通过运行 obclient -V 命令来查看 obclient 的版本信息。

五、检查租户参数 ob_tcp_invited_nodes

参数 ob_tcp_invited_nodes='%' 用于设置租户的 IP 白名单。

[root@10-186-65-12 ~]# mysql -hxxx -P2883 -uwms@hwc_test#hwc_cluster -p"xxx"
ERROR 1227 (42501): Access denied

// 检查租户参数
MySQL [(none)]> show variables like '%ob_tcp_invited_nodes%';
+----------------------+-------------+
| Variable_name        | Value       |
+----------------------+-------------+
| ob_tcp_invited_nodes | 10.186.57.% |
+----------------------+-------------+
1 row in set (0.01 sec)

// 如果租户白名单有限制,可以用如下命令修改:
ALTER TENANT test_tenant SET VARIABLES ob_tcp_invited_nodes='%';

六、检查 obproxy 日志

查看 obproxy 的日志文件,看看是否有与连接失败相关的错误信息。

日志文件通常位于 /home/admin/logs/obproxy/log/ 目录。

七、检查 obproxy 的配置

确认 obproxy 的配置中没有限制某些 IP 地址的连接,可以通过查看 obproxy 的配置文件来确认这一点。

配置文件通常位于 /home/admin/logs/obproxy/etc/ 目录下。

// 查看配置文件:
strings obproxy_config.bin

问题定位

生产环境使用的 MySQL 客户端版本为 8.0.18,经过测试发现,只有部分 MySQL 8.x 版本的客户端支持连接 OceanBase 集群。

登录报错的原因是 MySQL 客户端版本与 OceanBase 集群不匹配导致。

分类: OceanBase