本文将为大家总结 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 集群不匹配导致。