这应该是死的简单,但我不能让它为我的生活工作 .
我只是想远程连接到我的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 回答
可能是安全预防措施 . 您可以尝试添加新的管理员帐户:
虽然Pascal和其他人已经注意到让具有这种访问权限的用户对任何IP开放都不是一个好主意 . 如果需要管理用户,请使用root,并将其保留在localhost上 . 对于任何其他操作,请指定您需要的权限,并限制用户的可访问性,如Pascal在下面建议的那样 .
编辑:
来自MySQL FAQ:
必须通过phpMyAdmin或命令提示符在
Query prompt
中创建new MySQL User
并分配如下所示的权限:完成所有四个查询后,它应该与
username / password
连接我的错误消息类似,并说'主机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地址,端口和数据库命名为您的设置)
sudo service mysqld restart
您现在应该能够远程连接到您的数据库 . 例如,我'm using MySQL Workbench and putting in '主机名:10.1.1.7 ', '端口:3306 ', '用户名:root'
您需要从任何主机名授予对用户的访问权限 .
这是您从phpmyadmin添加新权限的方式
转到权限>添加新用户
选择 Any Host 作为所需的用户名
只需执行以下步骤:
1)连接到mysql
2)创建用户
3)授予权限
4)冲洗特权
消息
*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客户端解决了这个问题 .
如果手动修改授权表(使用INSERT,UPDATE等),则应执行
FLUSH PRIVILEGES
语句以告知服务器重新加载授权表 .PS:我不建议允许 any 主机连接 any 用户(尤其不是
root
使用) . 如果您将mysql用于客户端/服务器应用程序,则更喜欢子网地址 . 如果您将mysql与Web服务器或应用程序服务器一起使用,请使用特定的IP .简单的方法是用root帐号登录phpmyadmin,有goto mysql数据库并选择用户表,有编辑root帐号,在主机字段中添加%wild卡 . 然后通过ssh flush权限
只需使用MySql的GUI工具(SQLyog)提供的界面:
单击用户管理器:
现在,如果您要为任何其他远程PC授予访问权限,请确保,就像在下面的图片中一样,Host字段值为%(这是通配符)
如果这是最近的mysql安装,那么在更改其他任何内容之前,只需执行此命令然后再试一次:
仅此一项就在Ubuntu 16.04,mysql 5.7.20上解决了这个问题 . 因人而异 .
那么你可以做的只是打开mysql.cfg文件,你必须将Bind-address更改为此
bind-address = 127.0.0.1
然后重新启动mysql,您就可以将该服务器连接到此了 .
看看这个你可以有想法的形式 .
this is real sol
如果您碰巧在Windows上运行;一个简单的解决方案是运行MySQL服务器实例配置向导 . 它位于开始菜单中的MYSQL组中 . 在最后一个屏幕的第二个屏幕上,单击“允许从远程计算机进行root访问”的框 .
这里的大多数答案显示您创建具有两个主机值的用户:一个用于
localhost
,一个用于%
.请注意,除了像root这样的内置localhost用户之外,您不需要这样做 . 如果您只想创建一个可以从任何地方登录的新用户,您可以使用
它会工作得很好 . (正如其他人所提到的,从任何域向用户授予管理权限是一个糟糕的主意 . )
只需从您的主机控制面板找到更好的方法(我在这里使用DirectAdmin)
只需转到控制面板中的目标服务器数据库,在我的情况下:MySQL管理 - >选择你的数据库 - >你会发现:"Access Hosts",只需在这里添加你的远程主机,它就可以了!
我猜其他C.panels上有类似选项,如plesk等 .
我希望它对你也有帮助 .
如果遇到这个问题的人在SQLyog中遇到这种情况,则会发生这种情况:
我已连接到远程数据库(从SQLyog中)并工作了几个小时 . 之后我离开系统几分钟,然后回来继续我的工作 - ERROR 1130 !我没有尝试过任何工作;重启SQLyog没有't fix it. Then I restarted the system - it still didn'工作 .
所以我尝试从终端连接 - 它工作 . 然后在SQLyog上重试它......它有效 . 除了'随机计算机怪癖'之外,我无法解释它,但我认为它可能对某人有所帮助 .
我也面临同样的问题 . 我在2分钟内解决了它,我只是通过cpanel白名单ip
假设您正在尝试从服务器A连接服务器B的数据库 . 转到服务器B Cpanel->远程MySQL->输入服务器A IP地址就是这样 .
问题:root @ localhost无法连接到openSUSE 42.2-1.150.x86_64上的全新mysql-community-server安装 . Mysql拒绝连接 - 期间 .
解:
File user.MYD has 0 size (真的吗?!) . 我从另一个工作系统复制了所有3个文件 .
我能够登录 . 然后,这只是重新应用所有架构权限的问题 . 此外,如果您禁用了IPv6,请暂时重新启用它,以便root @ :: 1帐户也可以正常工作 .
这个答案可能有助于某些人
所有这些答案都没有帮助,然后我意识到我忘了检查一个至关重要的事情..端口:)
我在运行在不同端口上的docker容器中运行mysql . 我指着端口3306上的主机,我运行了一个mysql服务器 . 我的容器在端口33060上公开了服务器 . 所以这一次,我正在查看错误的服务器!卫生署!
简单方法:
然后
完成了!
这适用于 DirectAdmin ;
转到
DirectAdmin
.转到
MySQL Management
.选择你的
database
.在
Accesse Host
标签下,有一个字段 . 您应该通过xxx.xx.xxx.xx
填写此字段 .点击
Add Host
.成品 . 现在,您可以通过
your_database_username
&your_database_password
访问此数据库 .So Simple!
如果你试图在没有定义的情况下执行mysql查询connectionstring,你会得到这个错误 .
可能你原谅在执行之前定义连接字符串 . 你看看了吗? (抱歉英文不好)
这里的所有答案在我的案例中都不起作用,所以我的访客可能会在将来帮助其他用户 . 这在我们的代码中也可能是一个问题,而不仅仅是在MySQL中 .
如果你正在使用
VB.NET
而不是这段代码:
您需要在第一行移动
MysqlConn = New MySqlConnection()
. 所以就是这样