出现错误 ERROR 1130 (HY000): Host 'db01' is not allowed to connect to this MariaDB server
,表示当前用户 test
没有足够的权限从主机 db01
连接到 MariaDB 服务器。以下是逐步解决方案:
1. 检查用户权限
登录 MariaDB 服务器(需本地或通过其他有权客户端),执行以下命令查看用户权限:
SELECT user, host FROM mysql.user WHERE user = 'test';
- 如果
host
列显示为localhost
或具体 IP(非db01
的 IP),说明用户test
未被授权从db01
连接。
2. 授予远程访问权限
根据需求选择以下任意一种方式:
方案 1:允许从任意主机连接(推荐用于测试环境)
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
'%'
表示允许所有主机(包括db01
)连接。- 替换
123456
为实际密码。
方案 2:仅允许从特定主机(如 db01
)连接
假设 db01
的 IP 是 172.16.3.51
,则执行:
GRANT ALL PRIVILEGES ON *.* TO 'test'@'172.16.3.51' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
- 若需允许
172.16.3.0/24
网段的所有 IP,可使用'172.16.3.%'
。
3. 处理可能的冲突
如果执行 GRANT
时提示 ERROR 1062 (23000): Duplicate entry
(如已存在 'test'@'%'
或类似记录),需先删除冲突记录:
DELETE FROM mysql.user WHERE user = 'test' AND host = '%'; -- 示例
FLUSH PRIVILEGES;
再重新执行 GRANT
命令。
4. 验证防火墙设置
确保 MariaDB 服务器的 3306 端口 对 db01
的 IP 开放:
- Linux 防火墙:检查
firewalld
或iptables
规则。firewall-cmd --permanent --add-source=172.16.3.51 --zone=public firewall-cmd --reload
- 云服务器:检查安全组是否放行 3306 端口(入方向)。
5. 重启 MariaDB 服务
部分情况下需重启服务以应用配置:
sudo systemctl restart mariadb
最终验证
在 db01
上重新执行连接命令:
mysql -utest -p123456 -h172.16.3.51
若成功连接,问题解决。
补充说明
- 安全性建议:生产环境中避免使用
'%'
,改为限定具体 IP 或网段。 - 密码复杂度:建议将简单密码(如
123456
)改为复杂密码,避免安全风险。
参考来源:MySQL 官方文档、搜索结果中多个权限配置案例[1][2][3][4][5]。