You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建远程访问MySQL用户后,连接仍被强制到localhost的问题排查

MariaDB远程连接被识别为localhost的排查与解决

问题背景

在Slackware 15系统的MariaDB环境中,按以下步骤创建远程用户并配置权限:

  1. 以root身份登录:
mysql -u root
  1. 创建允许所有主机访问且要求SSL的用户:
CREATE USER 'myuser'@'%' IDENTIFIED BY 'password' REQUIRE SSL; FLUSH PRIVILEGES;
  1. 授予全权限:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:31:10