这应该很简单,但我不能让它为我的一生工作。我只是想远程连接到我的MySQL服务器。
连接方式:mysql-u根-h本地主机-p工作正常,但尝试:mysql-uroot-h'这里的任何ip地址'-p失败,错误为:错误1130(00000):主机“xxx.xx.xxx.xxx”不允许连接到此MySQL服务器
在mysql.user表中,主机为“localhost”的用户“root”的条目与主机为“%”的用户完全相同。
我束手无策,不知道该怎么办。欢迎提出任何想法。
这应该很简单,但我不能让它为我的一生工作。我只是想远程连接到我的MySQL服务器。
连接方式:mysql-u根-h本地主机-p工作正常,但尝试:mysql-uroot-h'这里的任何ip地址'-p失败,错误为:错误1130(00000):主机“xxx.xx.xxx.xxx”不允许连接到此MySQL服务器
在mysql.user表中,主机为“localhost”的用户“root”的条目与主机为“%”的用户完全相同。
我束手无策,不知道该怎么办。欢迎提出任何想法。
当前回答
嗯,上面的答案对我来说没有任何作用。经过大量研究,我找到了一个解决方案。虽然我可能会迟到,但这可能会在未来帮助其他人。
从终端登录SQL server
mysql -u root -p
-- root password
GRANT ALL ON *.* to root@'XX.XXX.XXX.XX' IDENTIFIED BY 'password';
这应该可以解决权限问题。
快乐编码!!
其他回答
只需使用MySql的GUI工具(SQLyog)提供的界面:
单击用户管理器:
现在,如果您想授予任何其他远程PC的访问权限,只需确保,正如下图所示,主机字段值为%(这是通配符)
如果您试图在不定义连接字符串的情况下执行mysql查询,则会出现此错误。
也许您可以在执行之前定义连接字符串。你检查过了吗?(对不起,英语不好)
这适用于任何未来的远程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
消息“主机”“xxx.xx.xxx.xxx”“不允许连接到此MySQL服务器”是MySQL服务器对MySQL客户端的答复。注意它如何返回IP地址而不是主机名。
如果您试图连接mysql-h<hostname>-u<someone>-p,并且它返回带有IP地址的消息,则mysql服务器无法在客户端上执行反向查找。这很关键,因为这就是它将MySQL客户端映射到授权的方式。
确保可以从MySQL服务器执行nslookup<mysqlclient>。如果这不起作用,那么DNS服务器中就没有条目。或者,您可以在MySQL服务器的HOSTS文件中输入一个条目(<ipaddress><fullyqualifiedhostname><hostname><-这里的顺序可能很重要)。
我的服务器主机文件中的一个条目允许反向查找MySQL客户端,解决了这个问题。
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
这个错误是因为没有root用户的密码,当您尝试从外部连接时,可能会发生这种情况。