本地连接MariaDB遇Access Denied错误,远程正常求排查方案
解决MariaDB本地连接
tuser@%报1045错误的问题 问题分析
你创建的tuser@%用户仅匹配TCP/IP远程连接,但本地连接时存在以下场景冲突:
- 直接执行
mysql -u tuser -p会通过Unix Socket(Linux)/命名管道(Windows)连接,MariaDB会优先匹配localhost主机的用户条目 - 指定
-h localhost/127.0.0.1/服务器名/本地IP时,若没有对应主机的用户条目或权限不足,就会触发1045错误
修复步骤
1. 登录MariaDB root账户
本地直接通过Socket登录(无需-h参数):
mysql -u root -p
2. 检查现有tuser的主机条目
执行SQL查看当前tuser的所有主机记录:
SELECT user, host, plugin FROM mysql.user WHERE user = 'tuser';
如果返回结果只有tuser@%,说明缺少本地连接对应的主机条目。
3. 创建本地连接对应的用户条目
为常用本地连接场景创建用户(密码保持与远程用户一致):
-- 匹配Socket连接的localhost用户 CREATE USER IF NOT EXISTS 'tuser'@'localhost' IDENTIFIED BY '123'; -- 匹配回环IP TCP连接的用户 CREATE USER IF NOT EXISTS 'tuser'@'127.0.0.1' IDENTIFIED BY '123'; -- 匹配服务器名和本地IP的用户 CREATE USER IF NOT EXISTS 'tuser'@'server_maria' IDENTIFIED BY '123'; CREATE USER IF NOT EXISTS 'tuser'@'192.168.1.50' IDENTIFIED BY '123';
4. 授予权限并刷新
给这些本地用户授予与远程用户相同的权限(根据实际需求调整,示例为全权限):
GRANT ALL PRIVILEGES ON *.* TO 'tuser'@'localhost'; GRANT ALL PRIVILEGES ON *.* TO 'tuser'@'127.0.0.1'; GRANT ALL PRIVILEGES ON *.* TO 'tuser'@'server_maria'; GRANT ALL PRIVILEGES ON *.* TO 'tuser'@'192.168.1.50'; -- 刷新权限使设置立即生效 FLUSH PRIVILEGES;
验证连接
现在尝试各种本地连接方式:
# Socket连接 mysql -u tuser -p # TCP连接到localhost mysql -u tuser -p -h localhost # TCP连接到127.0.0.1 mysql -u tuser -p -h 127.0.0.1 # TCP连接到服务器名/本地IP mysql -u tuser -p -h server_maria mysql -u tuser -p -h 192.168.1.50
内容的提问来源于stack exchange,提问作者GholamReza Maleki
相关产品推荐
相关产品推荐

