远程连接到mysql服务器?

远程连接到mysql服务器?

我一直在试图弄清楚为什么当我尝试使用以下命令连接到 MySQL 服务器时不断出现此错误。

$~ mysql -u username -h SQLserver -p
Enter password:
ERROR 1045 (28000): Access denied for user 'username'@'myIP' (using password: YES)

我已完成以下操作:
防火墙中的端口已打开,否则我不会收到错误,它只会超时。MySQL
服务器未使用 skip-networking 或 bind-address
用户名运行,主机为“%”,我可以在本地连接,因此密码是正确的。

GRANT USAGE ON *.* TO username@% IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

我想知道是否有人有想法或之前遇到过这个问题并解决了它?如您所见,我能够在本地登录,但是当我尝试执行 -h server 时出现错误。

mysql> SELECT user(),Current_user();
+--------------------+----------------+
| user()             | Current_user() |
+--------------------+----------------+
| username@localhost | username@%     |
+--------------------+----------------+
1 row in set (0.00 sec)

评论结果:

mysql> select user, host from mysql.user where user='username';
+----------+------+
|   user   | host |
+----------+------+
| username | %    |
+----------+------+
1 row in set (0.00 sec)

mysql> show grants for 'username';
+----------------------------------------------------------------------------------------------------------------+
| Grants for username@%                                                                                            |
+----------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY PASSWORD '*F42AD03PASSWORDHASHADF4021C86B' |
| GRANT ALL PRIVILEGES ON `DB2`.* TO 'username'@'%'                                                           |
+----------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

答案1

我似乎从记忆深处回忆起,为了使“用户”@“%”起作用,还必须有一个“用户”@“localhost”。

尝试创建具有相同用户名的 localhost 主机用户。

但我也可能真的错了。

答案2

这可能超出了范围,但我宁愿永远不要让数据库监听公共端口,这可以帮助您避免这个问题。

我使用 [auto]ssh 设置了我需要的所有远程数据库,以监听机器的本地主机,我想访问数据库。这:

autossh N -f -L 3307:127.0.0.1:3306 yourserver

会将您服务器的 127.0.0.1:3306 端口绑定到您调用的机器的本地主机端口 3307。您甚至不需要 sudo 权限即可绑定此端口。

当您使用以下方式访问服务器时

mysql -u user -P 3307 -h 127.0.0.1 -p      

您是远程主机上的“localhost”用户,不再需要'user'@'remote''user'@'%'指令。但不要使用

mysql -u user -P 3307 -h localhost -p 

因为这样 mysql 客户端就会尝试连接到套接字,而我们还没有通过这种方式转发,因此无法访问。

虽然 SSH 在建立连接后速度很快,但您应该感觉不到任何开销。autossh与 ssh 相比,它在断开连接后会无休止地尝试重新建立连接,而 ssh 则会终止。

相关内容