无法连接到 MySQL - 不允许主机
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/13378566/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Cannot connect to MySQL - host not allowed
提问by Johan S
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 应用程序时,出现以下错误:
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? I could just grant privileges like the answers to similar questions suggest but why aren't I localhost?
这真是令人沮丧。为什么我不是本地主机?什么是 192.168.1.7?我可以像类似问题的答案一样授予特权,但为什么我不是本地主机?
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 设置设置为创建,所以它想创建给定的表,但没有从 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>
回答by Olaf Dietsche
Look into your hibernate configuration file. 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. Connect to mysql and check privileges:
接下来看看mysql。连接mysql并查看权限:
$ mysql -u root -p
mysql> show grants for 'root'@'localhost';
mysql> show grants for 'root'@'192.168.1.7';
$ mysql -u root -p
mysql> show grants for 'root'@'localhost';
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> 将衣服上的所有权限.* 授予由 'password' 标识的 'root'@'localhost';
or
或者
mysql> grant all privileges on clothes.* to 'root'@'192.168.1.7' identified by 'password';
mysql> 将衣服上的所有权限.* 授予由 'password' 标识的 'root'@'192.168.1.7';
and then
进而
mysql> flush privileges;
mysql> 刷新权限;
回答by Augusto
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. 192.168.1.7 is the ip of your computer.
这将允许您从任何主机连接到 mysql。192.168.1.7 是你电脑的ip。
If you want to secure your db instance, read the this bit of the mysql documentation.
如果您想保护您的数据库实例,请阅读mysql 文档的这一部分。
回答by Haimei
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