代码之家  ›  专栏  ›  技术社区  ›  concept47

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

  •  559
  • concept47  · 技术社区  · 15 年前

    这应该很简单,但我 不能 让它为我的生活工作。
    我只是想远程连接到我的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”的条目与具有主机“%”的用户“root”的条目完全相同。

    我快疯了,不知道该怎么办。 欢迎有任何想法。

    22 回复  |  直到 6 年前
        1
  •  675
  •   Yannick Motton    15 年前

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

    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开放并不是一个好主意。如果需要管理用户,请使用root,并将其保留在localhost上。对于任何其他操作,请准确指定所需的权限,并按照下面的Pascal建议限制用户的可访问性。

    编辑:

    从MySQL常见问题解答:

    如果你不明白为什么 拒绝访问,从用户中删除 表具有主机的所有条目 包含通配符(条目)的值 包含“%”或“u”字符的。一 常见的错误是插入新的 HOST='%'和 user='某个用户',认为 允许您将localhost指定为 从同一台机器连接。这个 这不起作用的原因是 默认权限包括 带有host='localhost'和 用户= ''。因为那个条目有一个主机 值“localhost”,即 特定于“%”,它用于 新条目的首选项 正在从本地主机连接!正确的 过程是插入第二个条目 使用host='localhost'和 user='某个用户',或删除 带有host='localhost'和 用户= ''。删除条目后, 记住发出刷新权限 用于重新加载授予表的语句。 另见第5.4.4节,__访问 控制,第一阶段:连接 验证。

        2
  •  224
  •   Andrey Mikhaylov - lolmaus    9 年前

    必须创造一个 new MySQL User 并按以下方式分配特权 Query prompt 通过phpmyadmin或命令提示:

    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

        3
  •  95
  •   marverix    6 年前

    我的错误信息是类似的,并说 主机xxx不允许连接到此MySQL服务器 “即使我用的是根。下面介绍如何确保根目录具有正确的权限。

    我的设置 :

    • Ubuntu 14.04升
    • MySQLv5.5.37

    解决方案

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

      • 端口(默认为'port=3306')
      • 绑定地址(默认情况下为“bind address=127.0.0.1”;如果您想打开到所有人,只需注释这一行即可。对于我的示例,我会说实际服务器在10.1.1.7上)
    3. 现在访问实际服务器上的MySQL数据库(假设您的远程地址是3306端口的123.123.123.123,作为用户“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服务mysqld重启

    5. 现在应该可以远程连接到数据库了。例如,我使用mysql工作台并输入“hostname:10.1.1.7”、“port:3306”、“username:root”
        4
  •  66
  •   HimalayanCoder    11 年前

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

    这是如何从phpmyadmin添加新权限的方法

    转到权限>添加新用户

    enter image description here

    选择 任何主机 对于所需用户名

    enter image description here

        5
  •  53
  •   avisheks    10 年前

    只需执行以下步骤:

    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;
    
        6
  •  23
  •   Dennis McLaughlin    12 年前

    消息 *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客户机映射到授权的方式。

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

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

        7
  •  14
  •   Pascal Thivent    15 年前

    如果手动修改授权表(使用insert、update等),则应执行 一 FLUSH PRIVILEGES 命令服务器重新加载授予表的语句。

    附言:我不建议允许 任何 要连接的主机 任何 用户(尤其不是 root 使用)。如果您将mysql用于客户机/服务器应用程序,请选择子网地址。如果您在Web服务器或应用程序服务器上使用MySQL,请使用特定的IP。

        8
  •  4
  •   BabaNew    7 年前

    只需使用MySQL的GUI工具(sqlyog)提供的界面:

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

    现在,如果您想授予任何其他远程PC的访问权限,只需确保,就像下面的图片一样,主机字段值为%(通配符)。

    enter image description here

        9
  •  3
  •   user889030    8 年前

    简单的方法是使用根帐户登录phpmyadmin,然后转到mysql数据库并选择用户表,然后编辑根帐户,在主机字段中添加%wild card。然后通过ssh刷新权限

     FLUSH PRIVILEGES;
    
        10
  •  3
  •   devugur    6 年前

    简单方法:

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

    然后

    FLUSH PRIVILEGES;
    

    完成!

        11
  •  2
  •   Erica Kane    7 年前

    这里的大多数答案都显示了创建具有两个主机值的用户:一个用于 localhost ,一个用于 % .

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

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

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

        12
  •  2
  •   Alex R    7 年前

    如果这是最近安装的MySQL,则在更改任何其他内容之前,请尝试执行此命令,然后重试:

    flush privileges;
    

    仅此一项就解决了Ubuntu16.04和MySQL5.7.20上的问题。YMMV。

        13
  •  1
  •   Kishan Bheemajiyani    10 年前

    你只要打开mysql.cfg文件就可以了,你必须改变绑定地址。

    绑定地址=127.0.0.1

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

    看这个,你可以从中得到一些想法。

    this is real sol

        14
  •  1
  •   Jan    8 年前

    如果您正好在Windows上运行,一个简单的解决方案是运行mysql服务器实例配置向导。它在MySQL组的“开始”菜单中。在最后一个屏幕的第二个屏幕上,单击“允许从远程计算机访问根目录”框。

        15
  •  1
  •   Eran Levi    6 年前

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

    在我的例子中,只需转到控制面板中的目标服务器数据库: MySQL管理->选择您的数据库->您会发现:“访问主机”,只需将远程主机添加到此处并立即运行即可! enter image description here

    我想在其他C.面板上也有类似的选择,比如Plesk等。

    希望对你也有帮助。

        16
  •  0
  •   Emmanuel psu    9 年前

    遇到此问题的人在sqlyog中遇到此问题的可能性很小,这发生了:

    我连接到远程数据库(在sqlyog中),工作了几个小时。后来我离开系统几分钟,然后回来继续我的工作- 错误1130 你说什么?我试过的都没用;重新启动sqlyog没有解决问题。然后我重新启动了系统-它仍然不工作。

    所以我试着从终端连接-它起作用了。然后在sqlyog上重试…它奏效了。除了“随机的计算机怪癖”,我不能解释它,但我认为它可能会帮助一些人。

        17
  •  0
  •   depperm    8 年前

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

    假设您试图从服务器A连接服务器B的数据库。 转到服务器b cpanel->远程mysql->输入服务器a的IP地址,就这样。

        18
  •  0
  •   Alex D    6 年前

    问题:root@localhost无法连接到OpenSUSE 42.2-1.150.x86 U 64上新安装的MySQL社区服务器。 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,请临时重新启用它,以便根@:1帐户也可以工作。

        19
  •  0
  •   Srini    6 年前

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

    所有这些答案都无济于事,然后我意识到我忘了检查一件重要的事情。港口:

    我让MySQL运行在另一个端口上运行的Docker容器中。我指向3306端口上的主机,该端口上运行着MySQL服务器。我的容器在端口33060上暴露服务器。所以一直以来,我都在看错误的服务器!呸!

        20
  •  0
  •   اسماعیل زارع    6 年前

    这是为了 直接管理 ;

    1. 去你的 DirectAdmin .
    2. 去你的 MySQL Management .
    3. 选择你的 database .
    4. 在你的下面 Accesse Host 选项卡,有一个字段。 你应该填写这个字段 xxx.xx.xxx.xx .
    5. 点击 Add Host .

    完成了。现在您可以通过 your_database_username 和; your_database_password .
    这么简单!

        21
  •  -1
  •   Ali CAKIL    9 年前

    如果您试图在不定义connectionstring的情况下执行mysql查询,则会出现此错误。

    在执行之前,您可能需要定义连接字符串。你查过这个吗? (抱歉英语不好)

        22
  •  -1
  •   Cary Bondoc Ktmock13    9 年前

    这里的所有答案在我的情况下都不起作用,所以我的客人这可能有助于其他用户在未来。这在我们的代码中也是一个问题,不仅仅是在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