简体   繁体   English

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

[英]Cannot connect to MySQL - host not allowed

I've just started working with Hibernate and when I'm finally trying to launch the web-app I get the following error: 我刚刚开始使用Hibernate,当我最终尝试启动web-app时,我收到以下错误:

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"

Which is really frustrating. 这真是令人沮丧。 Why aren't I a localhost? 为什么我不是本地主机? What is 192.168.1.7? 什么是192.168.1.7? I could just grant privileges like the answers to similar questions suggest but why aren't I localhost? 我可以授予像类似问题的答案所说的特权,但为什么我不是localhost呢?

I understand the problem here, the hbm2ddl setting is set to create, so it wants to create the given tables but doesn't get permission from the MySQL-server. 我理解这里的问题,hbm2ddl设置被设置为create,所以它想要创建给定的表但是没有得到MySQL服务器的许可。

I'm developing a struts2/hibernate app in Eclipse and I use Tomcat and of course MYSQL. 我正在Eclipse中开发一个struts2 / hibernate应用程序,我使用Tomcat,当然还有MYSQL。

Thanks in advance! 提前致谢!

EDIT: (hibernate.cfg.xml) 编辑:(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>

Look into your hibernate configuration file. 查看您的hibernate配置文件。 There is an entry with 有一个条目

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

You must change this entry to connect to mysql at localhost. 您必须更改此条目以连接到localhost上的mysql。

Next look into mysql. 接下来看看mysql。 Connect to mysql and check privileges: 连接到mysql并检查权限:

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

If there are no grants for the appropriate database or tables, add them: 如果没有相应数据库或表的授权,请添加它们:

mysql> grant all privileges on clothes.* to 'root'@'localhost' identified by 'password'; mysql>授予衣服的所有权限。*''root'@'localhost'由'password'标识;

or 要么

mysql> grant all privileges on clothes.* to 'root'@'192.168.1.7' identified by 'password'; mysql>授予衣服的所有权限。*至'root'@'192.168.1.7'由'密码'标识;

and then 然后

mysql> flush privileges; mysql> flush特权;

run this command on your MySQL instance (replace the tokens) 在MySQL实例上运行此命令(替换令牌)

CREATE USER '${username}'@'%' IDENTIFIED BY '${password}';
GRANT ALL ON *.* TO '${username}'@'%';

this will allow you to connect to mysql from any host. 这将允许您从任何主机连接到mysql。 192.168.1.7 is the ip of your computer. 192.168.1.7是您计算机的IP。

If you want to secure your db instance, read the this bit of the mysql documentation . 如果要保护db实例,请阅读mysql文档的这一部分。

There are severals steps which you need to do: 您需要执行以下几个步骤:

Step1: do some configuration on my.conf Step1:在my.conf上做一些配置

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

Step2: go to mysql command(("your_remote_ip" is the pc which wants to access your mysql)) Step2:转到mysql命令((“your_remote_ip”是想要访问你的mysql的pc))

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

Step3: you can check its configuration on mysql Step3:你可以在mysql上检查它的配置

use mysql;

select user, host from user;

Step4: restart your mysql Step4:重启你的mysql

sudo /etc/init.d/mysql restart

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM