首页 文章

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

提问于
浏览
532

这应该是死的简单,但我不能让它为我的生活工作 .
我只是想远程连接到我的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 表中,用户'root'与主机'localhost'完全相同,主机'%'为另一个 .

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

22 回答

  • 0

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

    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 ='%'和User ='some_user',认为这允许您指定localhost从同一台机器连接 . 这不起作用的原因是默认权限包括Host ='localhost'和User =''的条目 . 因为该条目具有比'%'更具体的主机值'localhost',所以当从localhost连接时,它优先于新条目使用!正确的过程是插入第二个条目,其中Host ='localhost'和User ='some_user',或删除具有Host ='localhost'和User =''的条目 . 删除条目后,请记住发出FLUSH PRIVILEGES语句以重新加载授权表 . 另请参见第5.4.4节“访问控制,第1阶段:连接验证” .

  • 23

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

    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 连接

  • 65

    我的错误消息类似,并说'主机XXX不允许连接到此MySQL服务器' even though I was using root. Here' s如何确保root具有正确的权限 .

    My setup

    • Ubuntu 14.04 LTS

    • MySQL v5.5.37

    Solution

    • 在'etc/mysql/my.cnf'下打开文件

    • 检查:

    • port(默认为'port = 3306')

    • bind-address(默认情况下为'bind-address = 127.0.0.1';如果你想打开所有,那么只需注释掉这一行 . 对于我的例子,我会说实际的服务器是在10.1.1.7)

    • 现在访问实际服务器上的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
    
    • sudo service mysqld restart

    • 您现在应该能够远程连接到您的数据库 . 例如,我'm using MySQL Workbench and putting in '主机名:10.1.1.7 ', '端口:3306 ', '用户名:root'

  • 1

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

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

    转到权限>添加新用户

    enter image description here

    选择 Any Host 作为所需的用户名

    enter image description here

  • 0

    只需执行以下步骤:

    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;
    
  • 85

    消息 *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> . 如果没有't work, then there'在DNS服务器中没有条目 . 或者,您可以在MySQL服务器的HOSTS文件中放入一个条目( <ipaddress> <fullyqualifiedhostname> <hostname> < - 此处的顺序可能很重要) .

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

  • 2

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

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

  • 1

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

    FLUSH PRIVILEGES;
    
  • 52

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

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

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

    enter image description here

  • 1

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

    flush privileges;
    

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

  • -1

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

    bind-address = 127.0.0.1

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

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

    this is real sol

  • -1

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

  • 0

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

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

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

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

  • 0

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

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

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

    我希望它对你也有帮助 .

  • 0

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

    我已连接到远程数据库(从SQLyog中)并工作了几个小时 . 之后我离开系统几分钟,然后回来继续我的工作 - ERROR 1130 !我没有尝试过任何工作;重启SQLyog没有't fix it. Then I restarted the system - it still didn'工作 .

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

  • 648

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

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

  • 13

    问题: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
    

    File user.MYD has 0 size (真的吗?!) . 我从另一个工作系统复制了所有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帐户也可以正常工作 .

  • 0

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

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

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

  • 2

    简单方法:

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

    然后

    FLUSH PRIVILEGES;
    

    完成了!

  • 1

    这适用于 DirectAdmin ;

    • 转到 DirectAdmin .

    • 转到 MySQL Management .

    • 选择你的 database .

    • Accesse Host 标签下,有一个字段 . 您应该通过 xxx.xx.xxx.xx 填写此字段 .

    • 点击 Add Host .

    成品 . 现在,您可以通过 your_database_usernameyour_database_password 访问此数据库 .
    So Simple!

  • 3

    如果你试图在没有定义的情况下执行mysql查询connectionstring,你会得到这个错误 .

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

  • 213

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

相关问题