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

Host 'xxx.xx.xxx.xxx' is not allowed to connect to this MySQL server

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

连接为

1
mysql -u root -h localhost -p

工作正常,但尝试

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

因错误而失败

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

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

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


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

1
2
3
4
5
6
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:

If you cannot figure out why you get
Access denied, remove from the user
table all entries that have Host
values containing wildcards (entries
that contain '%' or '_' characters). A
very common error is to insert a new
entry with Host='%' and
User='some_user', thinking that this
allows you to specify localhost to
connect from the same machine. The
reason that this does not work is that
the default privileges include an
entry with Host='localhost' and
User=''. Because that entry has a Host
value 'localhost' that is more
specific than '%', it is used in
preference to the new entry when
connecting from localhost! The correct
procedure is to insert a second entry
with Host='localhost' and
User='some_user', or to delete the
entry with Host='localhost' and
User=''. After deleting the entry,
remember to issue a FLUSH PRIVILEGES
statement to reload the grant tables.
See also Section 5.4.4,"Access
Control, Stage 1: Connection
Verification".


必须通过phpMyAdmin或命令提示符在Query prompt中创建new MySQL User并分配如下所示的权限:

1
2
3
4
5
6
7
8
9
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

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

    • 端口(默认为'port = 3306')
    • bind-address(默认情况下,这是'bind-address = 127.0.0.1';如果你想打开所有,那么只需注释掉这一行。对于我的例子,我会说实际服务器在10.1.1.7)
  • 现在访问实际服务器上的MySQL数据库(假设你的远程地址是123.123.123.123,端口3306为用户'root',我想更改数据库'dataentry'的权限。请记住更改IP地址,端口和数据库名称到你的设置)

    1
    2
    3
    4
    5
    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
  • sudo service mysqld restart

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

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

    这是您从phpmyadmin添加新权限的方式

    转到权限>添加新用户

    enter image description here

    选择任意主机以获取所需的用户名

    enter image description here


    只需执行以下步骤:

    1)连接到mysql

    1
    mysql -uroot -p

    2)创建用户

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

    3)授予权限

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

    4)冲洗特权

    1
    FLUSH PRIVILEGES;


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

    如果您尝试使用mysql -h -u -p连接并且它使用IP地址返回此消息,则MySQL服务器无法在客户端上执行反向查找。这很关键,因为它是如何将MySQL客户端映射到授权的。

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

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


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

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


    简单方法:

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

    然后

    1
    FLUSH PRIVILEGES;

    完成了!


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

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

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

    enter image description here


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

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

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

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


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

    1
     FLUSH PRIVILEGES;


    只需从您的主机控制面板找到更好的方法(我在这里使用DirectAdmin)

    在我的情况下,只需转到控制面板中的目标服务器数据库:
    MySQL管理 - >选择你的数据库 - >你会发现:"访问主机",只需在这里添加你的远程主机并立即运行!
    enter image description here

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

    我希望它对你也有帮助。


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

    1
    flush privileges;

    仅此一项就在Ubuntu 16.04,mysql 5.7.20上解决了这个问题。因人而异。


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

    bind-address = 127.0.0.1

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

    看看这个你可以有想法的形式。

    这是真正的解决方案


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


    CPANEL解决方案

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

    主机(允许%通配符)

    评论要记住IP是什么。
    那是给我的。


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

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

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


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

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


    这个答案可能有助于某些人

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

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


    这适用于DirectAdmin;

  • 转到DirectAdmin
  • 转到MySQL Management
  • 选择database
  • Accesse Host标签下,有一个字段。
    您应该通过xxx.xx.xxx.xx填写此字段。
  • 单击Add Host
  • 成品。 现在,您可以通过your_database_usernameyour_database_password访问此数据库。
    很简单!


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

    这个错误,因为根目录没有密码,当您尝试从外部连接时,这可能发生在您身上。


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

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


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

    解:

    1
    2
    3
    4
    $ 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个文件。

    1
    2
    3
    4
    5
    6
    $ /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帐户也可以正常工作。


    这里的所有答案都不适用于我的情况,所以我的客人这可能会在将来帮助其他用户。这在我们的代码中也可能是一个问题,而不仅仅是在MySQL中。

    如果您使用的是VB.NET

    而不是这段代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     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()。所以就是这样

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     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