MySQL访问权限授权问题
遇到错误 1130 - Host ‘192.168.56.1’ is not allowed to connect,说明 MySQL 服务器拒绝了来自 IP 地址 192.168.56.1
的访问请求。以下是完整的解决方案:
问题原因
MySQL 默认只允许 本地连接(localhost),如果尝试从其他主机或 IP(如虚拟机、远程服务器)连接,需手动授权。
解决方案
1. 登录 MySQL 并修改权限
需在 MySQL 服务器本地执行以下步骤:
-
以 root 身份登录 MySQL(在服务器本机操作):
mysql -u root -p
-
进入
mysql
数据库:USE mysql;
-
查看当前 root 用户的权限:
SELECT Host, User FROM user WHERE User = 'root';
- 如果结果中
Host
列只有localhost
,则需要添加新权限。
- 如果结果中
-
允许指定 IP 访问(例如
192.168.56.1
):-- 方法1:直接授权(MySQL 5.7+) CREATE USER 'root'@'192.168.56.1' IDENTIFIED BY '你的密码'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.56.1' WITH GRANT OPTION;-- 方法2:更新 user 表(通用) UPDATE user SET Host = '192.168.56.1' WHERE User = 'root' AND Host = 'localhost';
-
刷新权限:
FLUSH PRIVILEGES; EXIT;
2. 检查 MySQL 绑定地址
确保 MySQL 监听所有网络接口或指定 IP:
- 打开 MySQL 配置文件
my.ini
(默认路径:C:\ProgramData\MySQL\MySQL Server X.X\my.ini
)。 - 找到
[mysqld]
部分,修改或添加:bind-address = 0.0.0.0 # 允许所有 IP 连接(或指定 192.168.56.1)
- 重启 MySQL 服务:
net stop MySQL net start MySQL
3. 测试连接
从客户端机器(IP 为 192.168.56.1
)执行:
mysql -u root -p -h <MySQL服务器IP> -P 3306
其他可能性
场景 | 解决方法 |
---|---|
授权所有 IP 访问 | 将 Host 改为 % (不推荐,存在安全风险) |
防火墙拦截 | 开放服务器 3306 端口(参考 Windows 防火墙放行端口教程) |
使用 SSH 或 VPN 隧道 | 通过加密通道连接 MySQL(更安全) |
安全建议
- 避免使用
%
允许所有 IP 访问。 - 建议通过 SSH 隧道 或 VPN 连接 MySQL。
- 使用非 root 用户并限制权限(如只读或指定数据库)。
如果仍无法解决,请提供以下信息:
SELECT Host, User FROM mysql.user;
的输出。- 服务器和客户端的 IP 配置。
- 是否跨虚拟机或物理网络连接(如 VirtualBox、VMware)。