我正在建立与 MySQL 服务器的远程连接,但无论我尝试什么,我都会收到来自远程服务器的访问被拒绝错误。
我通过以下方式添加了用户:
CREATE USER 'username'@'REMOTE_IP_ADDRESS' IDENTIFIED BY '***';
然后我授予了权限:
GRANT ALL PRIVILEGES ON databasename.* to username@REMOTE_IP_ADDRESS;
MySQL 服务器上我的用户表显示(除其他内容外):
+---------------+--------------------+
| user | host |
+---------------+--------------------+
| username | REMOTE_IP_ADDRESS |
+---------------+--------------------+
如果我向用户显示授权,我会得到:
+------------------------------------------------------------------------------------+
| Grants for username@REMOTE_IP_ADDRESS
+------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'username'@'REMOTE_IP_ADDRESS' IDENTIFIED BY PASSWORD '***'
| GRANT ALL PRIVILEGES ON `databasename`.* TO 'username'@'REMOTE_IP_ADDRESS'
+------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
然后在远程服务器上使用:
mysql -u username -p DB_SERVER_IP
并收到错误消息:
ERROR 1045 (28000): Access denied for user 'username'@'localhost' (using password: YES)
我已经执行了“刷新权限”,但仍然无法连接 - 我注意到错误是 username@localhost,而我没有为 username@localhost 设置任何权限,但我以前从未这样做过。我在同一台服务器上还有其他一些远程帐户,但它们都没有 @localhost,因为它们只能在本地连接。
我遗漏了什么?我是否忘记做某事或我还可以检查什么?
答案1
错误消息表明您根本没有连接到远程 MySQL,而是连接到本地主机。请确保使用选项连接-h
到远程服务器。
mysql -u username -h DB_SERVER_IP
答案2
为了简单起见,我们这样说:
计算机 A = 保存 MySQL DB。IPv4= 192.168.11.1
计算机 B= 有一个 Eclipse 程序想要连接到计算机 A 并对架构进行操作。Ipv4= 192.168.22.2
在计算机A上执行以下操作:
看起来您正在尝试创建一个名为“username”@“192.168.22.2”的新用户,但另一个名为“username”@“localhost”的用户却妨碍了/抢占了先机。
执行此命令查看用户:
SELECT user,host FROM mysql.user;
您应该看到两个条目:
1)用户=用户名,主机=本地主机
2)用户=用户名,主机=192.168.22.2
这些命令也是如此:
DROP User 'username'@'localhost';
DROP User 'username'@'192.168.22.2';
注意,如果您看到“用户名”@“%”用户,也请删除该行。
重新启动 MySQL Workbench
然后再次执行原来的命令:
CREATE USER 'username'@'192.168.22.2' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON databasename.* TO 'username'@'192.168.22.2';
我不明白为什么您使用“***”作为密码,所以我将其替换为“密码”。
然后转到计算机 B 并打开命令提示符/终端。输入以下内容,您应该可以连接到计算机 A。如果无法连接,请检查计算机 A 的防火墙的入站规则,并检查 MySQL 服务是否在计算机 A 上运行。
mysql --host=192.168.11.1 --user=username --password=password
(确保已将 mysql 设置为环境变量,否则命令提示符将无法理解“mysql”命令)
有用的故障排除方法:关闭计算机 A 上的所有防火墙规则。从计算机 B 的命令提示符/终端执行“ping 192.168.11.1”或“telnet 192.168.11.1 3306”。
答案3
您需要单独添加 localhost 用户。您可以在一个命令中完成此操作(而不是两个)。
GRANT ALL on database.* to 'user'@'localhost' identified by 'paswword';
如果您想添加用户以便它可以从任何地方连接(不太安全),请使用以下命令:
GRANT ALL on database.* to 'user'@'%' identified by 'password';
答案4
提示:
注释掉 pid 和 socket 文件,如果你无法连接到服务器.. mysql 可能连接了不正确的 pid 和/或 socket 文件,所以当你尝试通过命令行连接到服务器时“看起来”
在不正确的 pid/socket 文件...
### 如果无法连接到服务器,请注释掉 pid 和 socket 文件..
#pid-file=/var/run/mysql/mysqld.pid #socket=/var/lib/mysql/mysql.sock