远程连接到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; 

我想知道是否有人有想法或遇到过这个问题,并解决它? 正如你所看到的,我可以在本地login,但是当我试图做-h服务器时,我得到了错误。

 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) 

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

我使用[auto] ssh设置所有需要的远程数据库来监听本机的localhost,我想访问db。 这个:

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

会将yourserver的127.0.0.1:3306上的端口绑定到您的电话所在机器的localhost端口3307。 你甚至不需要sudo权限来绑定这个端口。

当你现在访问服务器

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

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

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

因为这种方式mysql客户端试图连接到我们没有这样转发,因此无法访问的套接字。

以为连接设置后SSH很快,你应该感觉不到开销。 autossh不断尝试重新build立连接后,与ssh进行比较,这将会终止。

我似乎从我记忆深刻的回忆中想起,为了使用''%''工作,你还必须有'用户'@'本地主机'。

尝试使用相同的用户名制作本地主机用户。

我可能是真的错了。