主机'xxx.xx.xxx.xxx'不允许连接到这个MySQL服务器
这应该是简单的死,但我不能为它的生活工作。
我只是想远程连接到我的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'条目。
我在我的智慧结束,并不知道如何进行。 任何想法都欢迎。
可能是安全预防措施。 您可以尝试添加新的pipe理员帐户:
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开放并不是一个好主意。 如果您需要pipe理用户,请使用root并将其保留在本地主机上。 对于任何其他操作,请正确指定您需要的权限,并按照Pascal在下面的build议限制用户的可访问性。
编辑:
从MySQL FAQ:
如果您无法弄清楚Access Access被拒绝的原因,请从用户表中删除包含通配符的主机值的所有条目(包含'%'或'_'字符的条目)。 一个非常常见的错误是插入一个Host ='%'和User ='some_user'的新条目,认为这允许你指定本地主机从同一台机器连接。 这不起作用的原因是默认权限包括Host ='localhost'和User =''的条目。 由于该条目具有比“%”更具体的主机值“本地主机”,所以在从本地主机连接时优先使用新条目! 正确的过程是插入Host ='localhost'和User ='some_user'的第二个条目,或删除Host ='localhost'和User =''的条目。 删除条目后,记得发出一个FLUSH PRIVILEGES语句来重新加载授权表。 另请参见第5.4.4节“访问控制,第1阶段:连接validation”。
你必须创build一个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
我的错误信息是类似的,即使我使用的是root,“ 主机XXX不允许连接到这个MySQL服务器 ”。 以下是如何确保root拥有正确的权限。
我的设置 :
- Ubuntu 14.04 LTS
- MySQL v5.5.37
解
- 打开'etc / mysql / my.cnf'下的文件
-
检查:
- 端口(默认情况下这是'端口= 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服务mysql重启
- 您现在应该能够远程连接到您的数据库。 例如,我正在使用MySQL Workbench并将“主机名:10.1.1.7”,“端口:3306”,“用户名:root”
您需要从任何主机名授予对用户的访问权限。
这是你如何从phpmyadmin添加新的特权
转到特权>添加新用户
select任何主机作为所需的用户名
只需执行以下步骤:
1)连接到MySQL
mysql -uroot -p
2)创build用户
CREATE USER 'user'@'%' IDENTIFIED BY 'password';
3)授予权限
GRANT ALL PRIVILEGES ON \*.\* TO 'user'@'%' WITH GRANT OPTION;
4)冲洗特权
FLUSH PRIVILEGES;
*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>
< <ipaddress> <fullyqualifiedhostname> <hostname>
< – 这里的顺序可能很重要)中放入一个条目。
我的服务器的主机文件中允许反向查找MySQL客户端的条目解决了这个问题。
如果手动修改授权表(使用INSERT,UPDATE等),则应该执行FLUSH PRIVILEGES
语句来通知服务器重新加载授权表。
PS:我不会build议允许任何主机连接任何用户(尤其是不是root
用户)。 如果您正在使用mysql作为客户机/服务器应用程序,那么首选子网地址。 如果您正在使用MySQL与Web服务器或应用程序服务器,请使用特定的IP。
简单的方法是用root帐户loginphpmyadmin,出现mysql数据库并select用户表,在那里编辑root帐号,在host字段中添加%wild card。 然后通过ssh刷新权限
FLUSH PRIVILEGES;
如果你碰巧在Windows上运行; 一个简单的解决scheme是运行MySQL服务器实例configuration向导。 它位于开始菜单的MYSQL组中。 在最后一个屏幕的第二个屏幕上,单击“允许远程机器访问根”的框。
这里的大多数答案显示,您可以使用两个主机值创build用户:一个用于localhost
,另一个用于%
。
请注意,除了root之类的内置localhost用户外,您不需要这样做。 如果您只想创build一个可以从任何地方login的新用户,则可以使用
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword'; GRANT <whatever privileges are appropriate> ON <relevant tables> TO myuser;
它会工作得很好。 (正如其他人所说,从任何领域向用户授予pipe理权限是一个糟糕的主意。)
那么你可以做的只是打开mysql.cfg文件,你必须改变绑定地址为此
bind-address = 127.0.0.1
然后重新启动MySQL,你将能够连接到这个服务器。
看这个,你可以有想法的forms。
这是真正的解决办法
这里的所有答案都没有在我的情况下工作,所以我来这可能会帮助其他用户在未来。 这也可能是我们代码中的问题,而不仅仅是在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
我也面临同样的问题。 我在2分钟内解决了我,我只是通过cPanel白名单ip
假设你正在尝试从服务器A连接服务器B的数据库。转到服务器B Cpanel->远程MySQL->input服务器IP地址就是这样。
只需使用由MySql的GUI工具(SQLyog)提供的接口:
点击用户pipe理器:
现在,如果你想授予访问任何其他远程PC,只要确保,就像在下面的图片,主机字段值是%(这是通配符)
在面临这个问题的人从SQLyog中遇到这个问题的时候,发生了这样的情况:
我已经连接到远程数据库(从SQLyog内)并工作了几个小时。 之后,我离开了系统几分钟,然后回来继续我的工作 – 错误1130 ! 没有什么我尝试过的; 重新启动SQLyog没有修复它。 然后,我重新启动系统 – 它仍然没有工作。
所以我试图从terminal连接 – 它的工作。 然后重试它在SQLyog …它的工作。 除了“随机电脑怪癖”之外,我不能解释它,但是我认为它可能有助于某人。
如果你正在试图执行MySQL查询而没有定义connectionstring,你将会得到这个错误。
在执行之前,你可能会原谅你定义连接string。 你有检查吗? (抱歉英语不好)