2、该用户没有从当前主机连接的权限
现象:`'xxx'@'yyy'` 中的 `yyy` 并不是授权过的主机。
例:用户只授权了 `'user'@'localhost'`,但你从 192.168.1.10 连接。
解决(任选其一):
sql
在服务器本地登录后执行
CREATE USER 'user'@'192.168.1.10' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON db.* TO 'user'@'192.168.1.10';
FLUSH PRIVILEGES;
或者把 host 改成通配符:
sql
UPDATE mysql.user SET host='%' WHERE user='user';
FLUSH PRIVILEGES;
3、密码加密插件不匹配(MySQL 8.0 常见)
现象:老版本客户端(如 Navicat 11、MySQL 5.7 的 libmysql)连接 MySQL 8.0 报 1045。
原因:MySQL 8.0 默认使用 `caching_sha2_password`,老客户端只支持 `mysql_native_password`。
解决:
sql
ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY '密码';
FLUSH PRIVILEGES;
4、连接的是错误的实例 / 端口
现象:同一台机器装了多个 MySQL,或 Docker 映射了非 3306 端口。
解决:
指定正确端口:
bash
mysql -u user -p -h 127.0.0.1 -P 3307
确认实际监听的端口:
bash
netstat -tulnp | grep mysqld
5、密码里含有特殊字符,命令行解析错误
现象:密码含 `!@$%^&*()` 等字符,在 shell 中被转义。
解决:
用引号包裹:
bash
mysql -u user -p'P@ssw0rd!'