在Windows XP上运行的MySQL 5.1.31。
从本地 MySQL服务器(192.168.233.142)我可以按root连接如下:
>mysql --host=192.168.233.142 --user=root --password=redacted
从远程计算机(192.168.233.163),我可以看到mysql端口已打开:
# telnet 192.168.233.142 3306
Trying 192.168.233.142...
Connected to 192.168.233.142 (192.168.233.142).
但是当我尝试从远程机器连接到mysql时,我收到了:
# mysql --host=192.168.233.142 --user=root --password=redacted
ERROR 1045 (28000): Access denied for user 'root'@'192.168.233.163' (using password: YES)
我在mysql.user中只有两个条目:
Host User Password
--------------------------------------
localhost root *blahblahblah
% root [same as above]
启用远程访问还需要做些什么?
修改
正如下面的Paulo所建议的那样,我尝试用特定于IP的条目替换%的mysql.user条目,因此我的用户表现在看起来像这样:
Host User Password
------------------------------------------
localhost root *blahblahblah
192.168.233.163 root [same as above]
然后我重新启动机器,但问题仍然存在。
答案 0 :(得分:197)
你必须把它作为root:
GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'IP' IDENTIFIED BY 'PASSWORD' with grant option;
其中IP是您要允许访问的IP,USERNAME是您用来连接的用户,PASSWORD是相关密码。
如果您想允许从任何IP进行访问,只需将%
代替您的IP
然后你只需要把
FLUSH PRIVILEGES;
或重新启动mysql服务器就是这样。
答案 1 :(得分:83)
在我批准远程访问之后,我收到了同样的错误:
来自/etc/mysql/my.cnf
在较新版本的mysql中,文件的位置是
/etc/mysql/mysql.conf.d/mysqld.cnf
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
(评论此行:bind-address = 127.0.0.1
)
然后运行service mysql restart
。
答案 2 :(得分:55)
默认情况下,MySQL服务器远程访问被禁用。提供对用户的远程访问的过程是。
PATH
mysql -uroot -proot
(或根密码为。)mysql>
GRANT ALL PRIVILEGES ON *.* TO 'username'@'IP' IDENTIFIED BY 'password';
此处IP是您要允许远程访问的IP地址,如果我们将%
任何IP地址都可以远程访问。
示例:
C:\Users\UserName> cd C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin
C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.27 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.25 sec)
这适用于其他用户。
mysql> GRANT ALL PRIVILEGES ON *.* TO 'testUser'@'%' IDENTIFIED BY 'testUser';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
希望这会有所帮助
答案 3 :(得分:20)
Paulo的帮助引导我找到解决方案。它是以下的组合:
bash shell将美元符号视为expansion对环境变量的特殊字符,因此我们需要使用反斜杠对其进行转义。顺便说一下,如果美元符号是密码的最后一个字符,我们不必须这样做。
例如,如果您的密码是“pas $ word”,那么从Linux bash我们必须按如下方式连接:
# mysql --host=192.168.233.142 --user=root --password=pas\$word
答案 4 :(得分:8)
你有防火墙吗?确保端口3306已打开。
在Windows上,默认情况下创建的mysql root帐户只允许从localhost访问,除非您在安装过程中选择了启用远程计算机访问权限的选项。
使用'%'作为主机名创建或更新所需用户。
示例:
CREATE USER 'krish'@'%' IDENTIFIED BY 'password';
答案 5 :(得分:4)
再次尝试flush privileges
。
尝试重新启动服务器以重新加载授权。
尝试使用主机“192.168.233.163”创建用户。 “%”似乎不允许所有(这很奇怪)
答案 6 :(得分:4)
在我的情况下,我试图连接到分操作系统上的远程mysql服务器。经过很多解决方案(授予所有权限,删除IP绑定,启用网络)问题仍然没有得到解决。
事实证明,在研究各种解决方案时,我遇到了iptables,这让我意识到mysql端口3306不接受连接。
以下是关于我如何检查并解决此问题的小说明。
检查端口是否正在接受连接:
telnet(mysql server ip)[portNo]
添加ip表规则以允许端口上的连接:
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
不建议将其用于生产环境,但如果您的iptables配置不正确,添加规则可能仍然无法解决问题。在这种情况下,应该完成以下操作:
service iptables stop
希望这有帮助。
答案 7 :(得分:2)
如果您使用的是动态IP,只需授予对192.168.2。%的访问权限,所以现在您不必担心每次都能授予对您的IP地址的访问权限。
答案 8 :(得分:2)
mysql配置文件的新位置是
/etc/mysql/mysql.conf.d/mysqld.cnf
答案 9 :(得分:1)
我正在努力为我的Amazon EC2 Linux实例远程登录MYSQL。发现解决方案是确保我的安全组包含MySQL端口3306的入站规则,以包含我的IP地址(或任何地方的0.0.0.0/0)。我可以在添加此规则后立即远程连接。
答案 10 :(得分:0)
MySQL ODBC 3.51驱动程序是不处理密码中的特殊字符。
“警告 - 如果GRANT命令中的密码包含特殊字符,例如!@#$%^ ?,您可能会对MySQL ODBC 3.51感到严重不满.MySQL ODBC 3.51 ODBC驱动程序不支持这些特殊字符密码框。您将收到的唯一错误消息是“拒绝访问”(使用密码:是)“ - 来自http://www.plaintutorials.com/install-and-create-mysql-odbc-connector-on-windows-7/
答案 11 :(得分:0)
可能是在没有密码的情况下创建了用户/主机组合。
我假设在为现有用户添加新主机时(使用GUI应用程序),现有密码也将用于新用户/主机组合。
我可以使用
登录mysql -u username -p PASSWORD
在本地,但不是来自IPADDRESS
mysql -u --host=HOST -p PASSWORD
(我实际上可以在不使用密码的情况下从IPADDRESS登录)
mysql -u --host=HOST
设置密码允许访问:
set password for '<USER>'@'<IPADDRESS>' = '<PASSWORD>';
答案 12 :(得分:0)
我的情况非常简单。
如果您输入错误的密码,您可能会遇到此问题。不需要创建用户(用户已经存在),没有其他权限。基本上确保密码正确。所以请再次确认密码是正确的