Host '***' is not allowed to connect to this MySQL server"

本文记录了一次因主机权限配置不当导致无法连接MySQL服务器的问题及解决过程。通过调整MySQL的用户权限设置,使得从不同的主机都能成功连接服务器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

21:19:11.422 [main] ERROR com.lancoo.ecbdc.persist.mysql.MySQL - null,  message from server: "Host 'master' is not allowed to connect to this MySQL server"
21:19:11.424 [main] ERROR com.lancoo.ecbdc.persist.mysql.MySQL - java.sql.SQLException: null,  message from server: "Host 'master' is not allowed to connect to this MySQL server"
java.sql.SQLException: null,  message from server: "Host 'master' is not allowed to connect to this MySQL server"
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1094)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:997)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:983)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1111)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2494)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2527)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2309)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:408)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:419)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at com.lancoo.ecbdc.persist.mysql.MySQL.getConnection(MySQL.java:37)
    at com.lancoo.ecbdc.persist.mysql.MySQL.<init>(MySQL.java:31)
    at com.lancoo.ecbdc.persist.DBFactory.getPersist(DBFactory.java:12)
    at com.lancoo.ecbdc.persist.App.main(App.java:15)
Exception in thread "main" java.lang.NullPointerException
    at com.lancoo.ecbdc.persist.mysql.MySQL.query(MySQL.java:53)
    at com.lancoo.ecbdc.persist.App.main(App.java:17)
mysql> select host from mysql.user where user='root';
+-----------+
| host      |
+-----------+
| localhost |
+-----------+
1 row in set (0.01 sec)

默认情况下,root仅仅允许从localhost和127.0.0.1登录到MySQL

解决方法:
使用以下命令授权

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '<root-password>' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> select host from mysql.user where user='root';
+-----------+
| host      |
+-----------+
| %         |
| localhost |
+-----------+
2 rows in set (0.00 sec)

### 解决 'Host is not allowed to connect to this MySQL server' 错误 当尝试通过远程客户端访问MySQL服务器时,可能会遇到“Host is not allowed to connect to this MySQL server”的错误提示。这通常是因为MySQL服务器配置限制了特定IP地址或主机名的连接权限。 #### 配置用户权限 为了允许来自指定主机的连接,需确保已创建具有适当权限的MySQL用户账户,并授予其从所需位置连接的权利: 1. 登录到MySQL数据库作为管理员: ```sql mysql -p ``` 2. 创建新用户并授予权限: ```sql CREATE USER 'username'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'username'@'%'; FLUSH PRIVILEGES; ``` 上述命令中的`%`表示任何地方都可以连接;如果仅希望某些特定IP能够连接,则应替换为具体的IP地址[^1]。 #### 修改防火墙设置 还需确认操作系统层面的安全策略不会阻止外部请求到达MySQL端口(默认3306)。对于Linux系统而言,可能需要调整iptables规则来开放该端口: ```bash sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT ``` 另外,部分云服务提供商也会有额外的安全组规则需要相应修改以放通入站流量[^4]。 #### 更新my.cnf文件绑定地址 有时,默认情况下mysqld只监听localhost接口。编辑/etc/mysql/my.cnf (Debian/Ubuntu) 或 /etc/my.cnf(RedHat/CentOS),找到如下行并将bind-address更改为实际外网IP或是0.0.0.0代表接受所有网络接口上的连接请求: ```ini [mysqld] ... bind-address = 0.0.0.0 ``` 完成更改后重启MySQL服务使改动生效[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值