这应该很简单,但我不能让它在我的生命中工作。
我只是想远程连接到我的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'与主机'%'的另一个条目完全相同。
我在我的智慧结束,并且不知道如何继续。 欢迎任何想法。
答案 0 :(得分:707)
可能是安全预防措施。您可以尝试添加新的管理员帐户:
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的条目 包含通配符的值(条目 包含'%'或'_'字符)。一个 非常常见的错误是插入一个新的 具有Host ='%'和。的条目 User ='some_user',以为这个 允许您指定localhost 从同一台机器连接。该 这不起作用的原因是 默认权限包括 使用Host ='localhost'输入 用户= ''。因为该条目有一个主机 值'localhost'更多 特定于'%',它用于 优先考虑新条目的时候 从localhost连接!正确的 过程是插入第二个条目 与Host ='localhost'和 User ='some_user',或删除 使用Host ='localhost'输入 用户= ''。删除条目后, 记得发出FLUSH PRIVILEGES 用于重新加载授权表的语句。 另请参见第5.4.4节“访问” 控制,阶段1:连接 验证”。
答案 1 :(得分:232)
必须创建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
答案 2 :(得分:102)
我的错误消息类似,并说'主机XXX不允许连接到此MySQL服务器',即使我使用的是root。以下是确保root具有正确权限的方法。
我的设置:
<强>解决方案强>
检查:
现在访问您实际服务器上的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
答案 3 :(得分:66)
您需要从任何主机名授予对用户的访问权限。
这是您从phpmyadmin
添加新权限的方法转到权限&gt;添加新用户
为所需的用户名
选择任意主机
答案 4 :(得分:56)
只需执行以下步骤:
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;
答案 5 :(得分:24)
消息*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>
&lt; - 这里的顺序可能很重要。)
我服务器主机文件中的一个条目允许反向查找MySQL客户端解决了这个问题。
答案 6 :(得分:15)
如果手动修改授权表(使用INSERT,UPDATE等),则应执行
一个FLUSH PRIVILEGES
语句,告诉服务器重新加载授权表。
PS:我不建议允许任何主机连接任何用户(尤其不是root
用户)。如果您将mysql用于客户端/服务器应用程序,则更喜欢子网地址。如果您将mysql与Web服务器或应用程序服务器一起使用,请使用特定的IP。
答案 7 :(得分:8)
简单方法:
Grant All Privileges ON *.* to 'USER_NAME'@'%' Identified By 'YOUR_PASSWORD';
然后
FLUSH PRIVILEGES;
完成!
答案 8 :(得分:4)
这适用于将来的任何远程mysql连接!
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
导航到以bind-address指令开头的行。它应该看起来像这样:
bind-address = 0.0.0.0
以root终端身份登录到您的mysql
mysql -u root -p
-- root password
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;
EXIT;
最终通过以下命令授予该计算机独占权限以远程连接到数据库。
sudo ufw allow from remote_IP_address to any port 3306
答案 9 :(得分:4)
答案 10 :(得分:3)
简单的方法是使用root帐户登录phpmyadmin,有goto mysql数据库并选择用户表,有编辑root帐户并在主机字段中添加%通配符。然后通过ssh flush权限
FLUSH PRIVILEGES;
答案 11 :(得分:2)
如果这是最近的mysql安装,那么在更改其他任何内容之前,只需执行此命令然后再试一次:
flush privileges;
仅在Ubuntu 16.04,mysql 5.7.20上解决了这个问题。 YMMV。
答案 12 :(得分:2)
此处的大多数答案都显示您使用两个主机值创建用户:一个用于localhost
,另一个用于%
。
请注意,除root之类的内置localhost用户外,您无需执行此操作。如果您只想创建一个可以从任何地方登录的新用户,您可以使用
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT <whatever privileges are appropriate> ON <relevant tables> TO myuser;
它会正常工作。 (正如其他人所提到的,从任何域向用户授予管理权限是一个糟糕的主意。)
答案 13 :(得分:1)
如果你碰巧在Windows上运行;一个简单的解决方案是运行MySQL服务器实例配置向导。它位于开始菜单中的MYSQL组中。在最后一个屏幕的第二个屏幕上,单击“允许从远程计算机进行root访问”的框。
答案 14 :(得分:1)
从托管控制面板找到更好的方法(我在这里使用DirectAdmin)
在我的情况下,只需转到控制面板中的目标服务器数据库: MySQL管理 - &gt;选择你的数据库 - &gt;你会发现:“访问主机”,只需在这里添加你的远程主机,它就可以了!
我猜其他C.panels上有类似选项,如plesk等。
我希望它对你也有帮助。
答案 15 :(得分:1)
你可以做的就是打开mysql.cfg文件,你必须将Bind-address更改为
bind-address = 127.0.0.1
然后重启mysql,您就可以将该服务器连接到此了。
看看你可以有这个想法。
答案 16 :(得分:0)
问题: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
文件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,请暂时重新启用它,以便root @ :: 1帐户也可以正常工作。
答案 17 :(得分:0)
这个答案可能对某人有帮助......
所有这些答案都没有帮助,然后我意识到我忘了检查一件至关重要的事情。端口:)
我在运行在不同端口上的docker容器中运行mysql。我指着端口3306上的主机,我运行了一个mysql服务器。我的容器在端口33060上公开了服务器。所以这一次,我正在查看错误的服务器!卫生署!
答案 18 :(得分:0)
如果遇到这个问题的人在SQLyog中遇到这种情况,就会发生这种情况:
我已经连接到远程数据库(来自SQLyog)并且工作了几个小时。之后我离开系统几分钟,然后回来继续我的工作 - ERROR 1130 !我没有尝试过任何工作;重启SQLyog并没有解决它。然后我重新启动了系统 - 它仍然没有工作。
所以我尝试从终端连接 - 它有效。然后在SQLyog上重试它......它有效。除了随机的计算机怪癖之外,我无法解释它,但我认为它可能对某人有帮助。
答案 19 :(得分:0)
我也面临同样的问题。我在2分钟内解决了这个问题,我只是白名单ip通过cpanel
假设您正在尝试从服务器A连接服务器B的数据库。 转到服务器B Cpanel-&gt;远程MySQL-&gt;输入服务器A IP地址,然后输入它。
答案 20 :(得分:0)
这适用于 DirectAdmin ;
DirectAdmin
。 MySQL Management
。database
。 Accesse Host
标签下,有一个字段。
您应使用xxx.xx.xxx.xx
填写此字段。Add Host
。 完成。现在,您可以通过your_database_username
和your_database_password
访问此数据库。
非常简单!
答案 21 :(得分:0)
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
此错误是因为没有密码登录到根目录,并且在您尝试从外部连接时可能与您发生了这种情况。
答案 22 :(得分:0)
CPANEL解决方案
转到Cpanel,查找“远程MySQL”。 在输入字段中添加IP:
主机(允许使用%通配符)
评论以记住那是什么IP。 对我来说就是那样。
答案 23 :(得分:0)
好吧,以上答案对我没有任何帮助。经过大量研究,我找到了解决方案。尽管我可能会迟到,但将来可能会对其他人有所帮助。
从终端登录到您的SQL Server
mysql -u root -p
-- root password
GRANT ALL ON *.* to root@'XX.XXX.XXX.XX' IDENTIFIED BY 'password';
这应该解决权限问题。
编码愉快!
答案 24 :(得分:0)
如果您使用的是 MySQL WorkBench,则可以轻松实现:
在此之后,您就可以开始了。然后,如果您想优化您的配置,您可以使用“管理角色”选项卡来设置用户可以使用的命令(SELECT、ALTER 等)和“架构权限”选项卡将用户交互限制为特定模式。
答案 25 :(得分:-1)
如果你试图在没有定义连接字符串的情况下执行mysql查询,你将收到此错误。
可能你要在执行前定义连接字符串。你看看了吗? (抱歉英语不好)
答案 26 :(得分:-1)
这里的所有答案在我的案例中都没有用,所以我的访客可以在将来帮助其他用户。这在我们的代码中也可能是一个问题,而不仅仅是在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