创建远程访问MySQL用户后,连接仍被强制到localhost的问题排查
MariaDB远程连接被识别为localhost的排查与解决
问题背景
在Slackware 15系统的MariaDB环境中,按以下步骤创建远程用户并配置权限:
- 以root身份登录:
mysql -u root
- 创建允许所有主机访问且要求SSL的用户:
CREATE USER 'myuser'@'%' IDENTIFIED BY 'password' REQUIRE SSL; FLUSH PRIVILEGES;
- 授予全权限:
GRANT ALL ON *.* TO 'myuser'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
执行远程连接命令mysql -h myhost -p并输入密码后,触发错误:
ERROR 1045 (28000): Access denied for user 'myuser'@'localhost' (using password: YES)
已确认3306端口开放,telnet-ssl myshost 3306可正常连接,ss -tulnepona|grep 3306显示mariadbd监听*:3306,且未使用$HOME/.my.cnf配置文件。
排查与解决方法
1. 检查本地hosts映射
若myhost在本地/etc/hosts中被解析为127.0.0.1或localhost,连接请求会被强制转向本地。
- 打开
/etc/hosts文件,确认myhost对应的是远程服务器的公网/局域网IP,而非本地回环地址。 - 若存在错误映射,删除或修改对应条目。
2. 显式指定连接用户名
执行mysql -h myhost -p时,客户端会默认使用当前系统用户名尝试登录。如果本地系统用户名恰好是myuser,但myuser@localhost用户不存在或权限不匹配,就会触发该错误。
- 连接时明确指定用户名:
mysql -u myuser -h myhost -p
3. 处理用户匹配优先级
MariaDB用户匹配遵循精确优先规则,若存在myuser@localhost用户(可能为系统默认生成),当连接来源被识别为localhost时,会优先匹配该用户而非myuser@%。
- 登录root查看所有用户:
SELECT user, host FROM mysql.user;
- 若存在
myuser@localhost且无需使用,可删除该用户:
DROP USER 'myuser'@'localhost'; FLUSH PRIVILEGES;
4. 强制启用SSL连接
创建用户时设置了REQUIRE SSL,但客户端连接时未明确启用SSL,会导致连接被拒绝,进而触发本地连接 fallback。
- 连接时添加SSL强制参数:
mysql -u myuser -h myhost -p --ssl-mode=REQUIRED
内容的提问来源于stack exchange,提问作者elbarna
相关产品推荐
相关产品推荐

