无法连接到MySQL - 主机不允许

11

我刚刚开始使用Hibernate,当我最终尝试启动Web应用程序时,出现了以下错误:

2012-nov-14 12:54:23 org.hibernate.tool.hbm2ddl.SchemaExport execute
ERROR: HHH000231: Schema export unsuccessful
java.sql.SQLException: null,  message from server: "Host '192.168.1.7' is not allowed to
connect to this MySQL server"

这真的很令人沮丧。为什么我不是localhost?192.168.1.7是什么?我可以像类似问题的答案建议的那样授予权限,但为什么我不是localhost?

我理解这里的问题,hbm2ddl设置被设置为create,因此它想要创建给定的表,但没有从MySQL服务器获取权限。

我正在Eclipse中开发一个struts2/hibernate应用程序,并且我使用Tomcat和当然MYSQL。

提前致谢!

编辑:(hibernate.cfg.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
    <property name="connection.driver_class"> com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/clothes</property>
    <property name="connection.username">root</property>
    <property name="connection.password">root</property>

    <property name="connection.pool_size">1</property>
    <property name="dialect"> org.hibernate.dialect.MySQLDialect</property>

    <property name="show_sql">true</property>

    <!-- Needs to be disabled in production! -->
    <property name="hbm2ddl.auto">create</property>

    <mapping class="johanstenberg.clothes.serverobjects.AdEntity"/>
    <mapping class="johanstenberg.clothes.serverobjects.AuthenticationEntity"/>
    <mapping class="johanstenberg.clothes.serverobjects.UserEntity"/>
    <mapping class="johanstenberg.clothes.serverobjects.VerificationKeyEntity"/>
</session-factory>
</hibernate-configuration>
3个回答

13

查看您的Hibernate配置文件。其中有一个条目:

<property name="connection.url"> ... </property>

您必须更改此条目以连接到本地的MySQL。

接下来,查看MySQL。连接到MySQL并检查权限:

$ mysql -u root -p
mysql> show grants for 'root'@'localhost';
mysql> show grants for 'root'@'192.168.1.7';

如果适当的数据库或表没有授权,请添加它们:

mysql> grant all privileges on clothes.* to 'root'@'localhost' identified by 'password';

或者

mysql> grant all privileges on clothes.* to 'root'@'192.168.1.7' identified by 'password';

然后

mysql> flush privileges;


1
<property name="connection.url">jdbc:mysql://localhost:3306/clothes</property> 已经是本地主机,正如您所看到的。 - Johan S
2
我在192.168.1.7上没有授权,但是我如何连接本地主机而不是192.168.1.7? - Johan S
我按照你的指示操作,现在它可以正常工作了。为什么我的IP地址是192.168.1.7而不是localhost,这将永远是个谜... - Johan S
我遇到了同样的问题。无法弄清楚为什么它认为我在68-245-171-115.pools.spcsdns.net上...我的错误是“原因:java.sql.SQLException: null,服务器消息:“主机'68-245-171-115.pools.spcsdns.net'不允许连接到此MySQL服务器”。 - Verdagon
1
@Verdagon 你必须查看Hibernate配置文件。属性connection.url告诉你客户端尝试通过哪个接口连接到MySQL服务器。 - Olaf Dietsche
显示剩余3条评论

7
在你的MySQL实例上运行以下命令(替换令牌)。
CREATE USER '${username}'@'%' IDENTIFIED BY '${password}';
GRANT ALL ON *.* TO '${username}'@'%';

这将允许您从任何主机连接到mysql。192.168.1.7是您计算机的IP地址。

如果您想保护您的数据库实例,请阅读mysql文档中的相关部分。


1
我的电脑IP是什么意思?是指在家庭网络中的电脑IP吗?难道我不能使用本地主机连接吗? - Johan S

0

有几个步骤需要完成:

第一步:在my.conf上进行一些配置

sudo vi /etc/mysql/my.cnf
bind-address = 0.0.0.0

步骤2:进入mysql命令行(“your_remote_ip”是想要访问你的mysql的电脑)

mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'your_mysql_username'@'your_remote_ip'IDENTIFIED BY 'your_mysql_password' WITH GRANT OPTION;

第三步:你可以在mysql上检查它的配置
use mysql;

select user, host from user;

步骤4:重新启动你的MySQL

sudo /etc/init.d/mysql restart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接