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

时间:2009-10-13 12:40:47

标签: mysql mysql-error-1130

这应该很简单,但我不能让它在我的生命中工作。
我只是想远程连接到我的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'与主机'%'的另一个条目完全相同。

我在我的智慧结束,并且不知道如何继续。 欢迎任何想法。

27 个答案:

答案 0 :(得分:707)

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

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;

虽然Pascal和其他人已经注意到让这种访问的用户对任何IP开放都不是一个好主意。如果需要管理用户,请使用root,并将其保留在localhost上。对于任何其他操作,请指定您需要的权限,并限制用户的可访问性,如Pascal在下面建议的那样。

编辑:

来自MySQL FAQ:

  

如果你不明白为什么会得到   访问被拒绝,从用户删除   表所有拥有Host的条目   包含通配符的值(条目   包含'%'或'_'字符)。一个   非常常见的错误是插入一个新的   具有Host ='%'和。的条目   User ='some_user',以为这个   允许您指定localhost   从同一台机器连接。该   这不起作用的原因是   默认权限包括   使用Host ='localhost'输入   用户= ''。因为该条目有一个主机   值'localhost'更多   特定于'%',它用于   优先考虑新条目的时候   从localhost连接!正确的   过程是插入第二个条目   与Host ='localhost'和   User ='some_user',或删除   使用Host ='localhost'输入   用户= ''。删除条目后,   记得发出FLUSH PRIVILEGES   用于重新加载授权表的语句。   另请参见第5.4.4节“访问”   控制,阶段1:连接   验证”。

答案 1 :(得分:232)

必须创建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

连接

答案 2 :(得分:102)

我的错误消息类似,并说'主机XXX不允许连接到此MySQL服务器',即使我使用的是root。以下是确保root具有正确权限的方法。

我的设置

  • Ubuntu 14.04 LTS
  • MySQL v5.5.37

<强>解决方案

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

    • port(默认情况下为'port = 3306')
    • bind-address(默认情况下,这是'bind-address = 127.0.0.1';如果你想打开所有,那么只需注释掉这一行。对于我的例子,我会说实际服务器在10.1上。 1.7)
  4. 现在访问您实际服务器上的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
    
  5. sudo service mysqld restart

  6. 您现在应该能够远程连接到您的数据库。例如,我正在使用MySQL Workbench并输入'Hostname:10.1.1.7','Port:3306','Username:root'

答案 3 :(得分:66)

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

这是您从phpmyadmin

添加新权限的方法

转到权限&gt;添加新用户

enter image description here

为所需的用户名

选择任意主机

enter image description here

答案 4 :(得分:56)

只需执行以下步骤:

1)连接到mysql

mysql -uroot -p

2)创建用户

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

3)授予权限

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

4)冲洗特权

FLUSH PRIVILEGES;

答案 5 :(得分:24)

消息*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>&lt; - 这里的顺序可能很重要。)

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

答案 6 :(得分:15)

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

PS:我不建议允许任何主机连接任何用户(尤其不是root用户)。如果您将mysql用于客户端/服务器应用程序,则更喜欢子网地址。如果您将mysql与Web服务器或应用程序服务器一起使用,请使用特定的IP。

答案 7 :(得分:8)

简单方法:

Grant All Privileges ON *.* to 'USER_NAME'@'%' Identified By 'YOUR_PASSWORD'; 

然后

FLUSH PRIVILEGES;

完成!

答案 8 :(得分:4)

这适用于将来的任何远程mysql连接!

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

导航到以bind-address指令开头的行。它应该看起来像这样:

    bind-address            = 0.0.0.0

以root终端身份登录到您的mysql

    mysql -u root -p
    -- root password

    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;

    EXIT;

最终通过以下命令授予该计算机独占权限以远程连接到数据库。

    sudo ufw allow from remote_IP_address to any port 3306

答案 9 :(得分:4)

只需使用MySql的GUI工具(SQLyog)提供的界面:

点击用户管理器: enter image description here

现在,如果您要为任何其他远程PC授予访问权限,请确保,就像在下面的图片中一样,Host字段值为%(这是通配符)

enter image description here

答案 10 :(得分:3)

简单的方法是使用root帐户登录phpmyadmin,有goto mysql数据库并选择用户表,有编辑root帐户并在主机字段中添加%通配符。然后通过ssh flush权限

 FLUSH PRIVILEGES;

答案 11 :(得分:2)

如果这是最近的mysql安装,那么在更改其他任何内容之前,只需执行此命令然后再试一次:

flush privileges;

仅在Ubuntu 16.04,mysql 5.7.20上解决了这个问题。 YMMV。

答案 12 :(得分:2)

此处的大多数答案都显示您使用两个主机值创建用户:一个用于localhost,另一个用于%

请注意,除root之类的内置localhost用户外,您无需执行此操作。如果您只想创建一个可以从任何地方登录的新用户,您可以使用

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

它会正常工作。 (正如其他人所提到的,从任何域向用户授予管理权限是一个糟糕的主意。)

答案 13 :(得分:1)

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

答案 14 :(得分:1)

从托管控制面板找到更好的方法(我在这里使用DirectAdmin)

在我的情况下,只需转到控制面板中的目标服务器数据库: MySQL管理 - &gt;选择你的数据库 - &gt;你会发现:“访问主机”,只需在这里添加你的远程主机,它就可以了! enter image description here

我猜其他C.panels上有类似选项,如plesk等。

我希望它对你也有帮助。

答案 15 :(得分:1)

你可以做的就是打开mysql.cfg文件,你必须将Bind-address更改为

bind-address = 127.0.0.1

然后重启mysql,您就可以将该服务器连接到此了。

看看你可以有这个想法。

this is real sol

答案 16 :(得分:0)

问题:root @ localhost无法连接到openSUSE 42.2-1.150.x86_64上的全新mysql-community-server安装。 Mysql拒绝连接 - 句号。

解决方案:

$ ls -l /var/lib/mysql/mysql/user.*
-rw-rw---- 1 mysql mysql     0 Apr 29 19:44 /var/lib/mysql/mysql/user.MYD
-rw-rw---- 1 mysql mysql  1024 Apr 29 19:44 /var/lib/mysql/mysql/user.MYI
-rw-rw---- 1 mysql mysql 10684 Apr 29 19:44 /var/lib/mysql/mysql/user.frm

文件user.MYD有0个大小(真的吗?!)。 我复制了另一个工作系统中的所有3个文件。

$ /usr/sbin/rcmysql stop
$ cd /var/lib/mysql/mysql/
$ scp root@othersytem:/var/lib/mysql/mysql/user.* ./
$ /usr/sbin/rcmysql start
$ cd -
$ mysql -u root -p

我能够登录。然后,这只是重新应用所有架构权限的问题。 此外,如果您禁用了IPv6,请暂时重新启用它,以便root @ :: 1帐户也可以正常工作。

答案 17 :(得分:0)

这个答案可能对某人有帮助......

所有这些答案都没有帮助,然后我意识到我忘了检查一件至关重要的事情。端口:)

我在运行在不同端口上的docker容器中运行mysql。我指着端口3306上的主机,我运行了一个mysql服务器。我的容器在端口33060上公开了服务器。所以这一次,我正在查看错误的服务器!卫生署!

答案 18 :(得分:0)

如果遇到这个问题的人在SQLyog中遇到这种情况,就会发生这种情况:

我已经连接到远程数据库(来自SQLyog)并且工作了几个小时。之后我离开系统几分钟,然后回来继续我的工作 - ERROR 1130 !我没有尝试过任何工作;重启SQLyog并没有解决它。然后我重新启动了系统 - 它仍然没有工作。

所以我尝试从终端连接 - 它有效。然后在SQLyog上重试它......它有效。除了随机的计算机怪癖之外,我无法解释它,但我认为它可能对某人有帮助。

答案 19 :(得分:0)

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

假设您正在尝试从服务器A连接服务器B的数据库。 转到服务器B Cpanel-&gt;远程MySQL-&gt;输入服务器A IP地址,然后输入它。

答案 20 :(得分:0)

这适用于 DirectAdmin ;

  1. 转到您的DirectAdmin
  2. 转到您的MySQL Management
  3. 选择您的database
  4. 在您的Accesse Host标签下,有一个字段。  您应使用xxx.xx.xxx.xx填写此字段。
  5. 单击Add Host

完成。现在,您可以通过your_database_usernameyour_database_password访问此数据库。
非常简单!

答案 21 :(得分:0)

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

此错误是因为没有密码登录到根目录,并且在您尝试从外部连接时可能与您发生了这种情况。

答案 22 :(得分:0)

CPANEL解决方案

转到Cpanel,查找“远程MySQL”。 在输入字段中添加IP:

主机(允许使用%通配符)

评论以记住那是什么IP。 对我来说就是那样。

答案 23 :(得分:0)

好吧,以上答案对我没有任何帮助。经过大量研究,我找到了解决方案。尽管我可能会迟到,但将来可能会对其他人有所帮助。

从终端登录到您的SQL Server

 mysql -u root -p
 -- root password
GRANT ALL ON *.* to root@'XX.XXX.XXX.XX' IDENTIFIED BY 'password';

这应该解决权限问题。

Before solving error

After solving issue

编码愉快!

答案 24 :(得分:0)

如果您使用的是 MySQL WorkBench,则可以轻松实现:

  1. 从菜单中选择服务器 -> 用户和权限 enter image description here

  2. 在左下角,点击“添加帐户” enter image description here

  3. 在表单中填写用户名、主机匹配(% 表示每个主机)和密码 enter image description here

  4. 点击右下角的“应用” enter image description here

在此之后,您就可以开始了。然后,如果您想优化您的配置,您可以使用“管理角色”选项卡来设置用户可以使用的命令(SELECT、ALTER 等)和“架构权限”选项卡将用户交互限制为特定模式。

答案 25 :(得分:-1)

如果你试图在没有定义连接字符串的情况下执行mysql查询,你将收到此错误。

可能你要在执行前定义连接字符串。你看看了吗? (抱歉英语不好)

答案 26 :(得分:-1)

这里的所有答案在我的案例中都没有用,所以我的访客可以在将来帮助其他用户。这在我们的代码中也可能是一个问题,而不仅仅是在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