主机'xxx.xx.xxx.xxx'不允许连接到这个MySQL服务器

这应该是简单的死,但我不能为它的生活工作。
我只是想远程连接到我的MySQL服务器。

连接为

mysql -u root -h localhost -p 

工作正常,但尝试

 mysql -u root -h 'any ip address here' -p 

失败,错误

 ERROR 1130 (00000): Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server 

mysql.user表中,主机'localhost'与主机'%'具有完全相同的用户'root'条目。

我在我的智慧结束,并不知道如何进行。 任何想法都欢迎。

可能是安全预防措施。 您可以尝试添加新的pipe理员帐户:

 mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass'; mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' -> WITH GRANT OPTION; mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass'; mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' -> WITH GRANT OPTION; 

虽然帕斯卡尔和其他人已经指出,让用户使用这种访​​问方式向任何IP开放并不是一个好主意。 如果您需要pipe理用户,请使用root并将其保留在本地主机上。 对于任何其他操作,请正确指定您需要的权限,并按照Pascal在下面的build议限制用户的可访问性。

编辑:

从MySQL FAQ:

如果您无法弄清楚Access Access被拒绝的原因,请从用户表中删除包含通配符的主机值的所有条目(包含'%'或'_'字符的条目)。 一个非常常见的错误是插入一个Host ='%'和User ='some_user'的新条目,认为这允许你指定本地主机从同一台机器连接。 这不起作用的原因是默认权限包括Host ='localhost'和User =''的条目。 由于该条目具有比“%”更具体的主机值“本地主机”,所以在从本地主机连接时优先使用新条目! 正确的过程是插入Host ='localhost'和User ='some_user'的第二个条目,或删除Host ='localhost'和User =''的条目。 删除条目后,记得发出一个FLUSH PRIVILEGES语句来重新加载授权表。 另请参见第5.4.4节“访问控制,第1阶段:连接validation”。

你必须创build一个new MySQL User并通过phpMyAdmin或命令提示符在Query prompt下分配权限:

 CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION; CREATE USER 'username'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; 

一旦完成所有四个查询,它应该连接username / password

我的错误信息是类似的,即使我使用的是root,“ 主机XXX不允许连接到这个MySQL服务器 ”。 以下是如何确保root拥有正确的权限。

我的设置

  • Ubuntu 14.04 LTS
  • MySQL v5.5.37

  1. 打开'etc / mysql / my.cnf'下的文件
  2. 检查:

    • 端口(默认情况下这是'端口= 3306')
    • bind-address(默认情况下是'bind-address = 127.0.0.1';如果你想打开所有的话,只需注释掉这行就可以了,例如我会说实际的服务器是10.1.1.7)
  3. 现在访问你的实际服务器上的MySQL数据库(比如你的远程地址是123.123.123.123,端口3306是用户'root',我想修改数据库'dataentry'的权限,记住要改变IP地址,端口和数据库名到你的设置)

     mysql -u root -p Enter password: <enter password> mysql>GRANT ALL ON *.* to root@'123.123.123.123' IDENTIFIED BY 'put-your-password'; mysql>FLUSH PRIVILEGES; mysql>exit 
  4. sudo服务mysql重启

  5. 您现在应该能够远程连接到您的数据库。 例如,我正在使用MySQL Workbench并将“主机名:10.1.1.7”,“端口:3306”,“用户名:root”

您需要从任何主机名授予对用户的访问权限。

这是你如何从phpmyadmin添加新的特权

转到特权>添加新用户

在这里输入图像描述

select任何主机作为所需的用户名

在这里输入图像描述

只需执行以下步骤:

1)连接到MySQL

 mysql -uroot -p 

2)创build用户

 CREATE USER 'user'@'%' IDENTIFIED BY 'password'; 

3)授予权限

  GRANT ALL PRIVILEGES ON \*.\* TO 'user'@'%' WITH GRANT OPTION; 

4)冲洗特权

 FLUSH PRIVILEGES; 

*Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server是从MySQL服务器到MySQL客户端的回复。 注意它是如何返回IP地址而不是主机名的。

如果你想连接mysql -h<hostname> -u<somebody> -p ,并且返回这个IP地址的消息,那么MySQL服务器不能在客户端上做反向查询。 这是至关重要的,因为这是如何将MySQL客户端映射到授权。

确保你可以从MySQL服务器上执行nslookup <mysqlclient> 。 如果这不起作用,那么DNS服务器中没有条目。 或者,您可以在MySQL服务器的HOSTS文件( <ipaddress> <fullyqualifiedhostname> <hostname> < <ipaddress> <fullyqualifiedhostname> <hostname> < – 这里的顺序可能很重要)中放入一个条目。

我的服务器的主机文件中允许反向查找MySQL客户端的条目解决了这个问题。

如果手动修改授权表(使用INSERT,UPDATE等),则应该执行FLUSH PRIVILEGES语句来通知服务器重新加载授权表。

PS:我不会build议允许任何主机连接任何用户(尤其是不是root用户)。 如果您正在使用mysql作为客户机/服务器应用程序,那么首选子网地址。 如果您正在使用MySQL与Web服务器或应用程序服务器,请使用特定的IP。

简单的方法是用root帐户loginphpmyadmin,出现mysql数据库并select用户表,在那里编辑root帐号,在host字段中添加%wild card。 然后通过ssh刷新权限

  FLUSH PRIVILEGES; 

如果你碰巧在Windows上运行; 一个简单的解决scheme是运行MySQL服务器实例configuration向导。 它位于开始菜单的MYSQL组中。 在最后一个屏幕的第二个屏幕上,单击“允许远程机器访问根”的框。

这里的大多数答案显示,您可以使用两个主机值创build用户:一个用于localhost ,另一个用于%

请注意,除了root之类的内置localhost用户外,您不需要这样做。 如果您只想创build一个可以从任何地方login的新用户,则可以使用

 CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword'; GRANT <whatever privileges are appropriate> ON <relevant tables> TO myuser; 

它会工作得很好。 (正如其他人所说,从任何领域向用户授予pipe理权限是一个糟糕的主意。)

那么你可以做的只是打开mysql.cfg文件,你必须改变绑定地址为此

bind-address = 127.0.0.1

然后重新启动MySQL,你将能够连接到这个服务器。

看这个,你可以有想法的forms。

这是真正的解决办法

这里的所有答案都没有在我的情况下工作,所以我来这可能会帮助其他用户在未来。 这也可能是我们代码中的问题,而不仅仅是在MySQL中。

如果你正在使用VB.NET

而不是这个代码:

  Dim server As String = My.Settings.DB_Server Dim username As String = My.Settings.DB_Username Dim password As String = My.Settings.DB_Password Dim database As String = My.Settings.DB_Database MysqlConn.ConnectionString = "server=" & server & ";" _ & "user id=" & username & ";" _ & "password=" & password & ";" _ & "database=" & database MysqlConn = New MySqlConnection() 

您需要在第一行移动MysqlConn = New MySqlConnection() 。 所以会是这样的

  MysqlConn = New MySqlConnection() Dim server As String = My.Settings.DB_Server Dim username As String = My.Settings.DB_Username Dim password As String = My.Settings.DB_Password Dim database As String = My.Settings.DB_Database MysqlConn.ConnectionString = "server=" & server & ";" _ & "user id=" & username & ";" _ & "password=" & password & ";" _ & "database=" & database 

我也面临同样的问题。 我在2分钟内解决了我,我只是通过cPanel白名单ip

假设你正在尝试从服务器A连接服务器B的数据库。转到服务器B Cpanel->远程MySQL->input服务器IP地址就是这样。

只需使用由MySql的GUI工具(SQLyog)提供的接口:

点击用户pipe理器: 在这里输入图像描述

现在,如果你想授予访问任何其他远程PC,只要确保,就像在下面的图片,主机字段值是%(这是通配符)

在这里输入图像描述

在面临这个问题的人从SQLyog中遇到这个问题的时候,发生了这样的情况:

我已经连接到远程数据库(从SQLyog内)并工作了几个小时。 之后,我离开了系统几分钟,然后回来继续我的工作 – 错误1130 ! 没有什么我尝试过的; 重新启动SQLyog没有修复它。 然后,我重新启动系统 – 它仍然没有工作。

所以我试图从terminal连接 – 它的工作。 然后重试它在SQLyog …它的工作。 除了“随机电脑怪癖”之外,我不能解释它,但是我认为它可能有助于某人。

如果你正在试图执行MySQL查询而没有定义connectionstring,你将会得到这个错误。

在执行之前,你可能会原谅你定义连接string。 你有检查吗? (抱歉英语不好)