我正在尝试构建使用 2 个 mysql 服务器的应用程序。我设置了端口转发(这是调用它的名称 - 我不知道),如下所示:
sudo ssh -g -L3306:foreignserver.ip:3306 [email protected]
我将自己的 my.cnf 端口改为 3360,然后
sudo service mysql restart
当我尝试连接到外国服务器时,失败了。
mysql --host=localhost --port=3306 --user=userinforeignsystem --password=pwdthere
给了我错误
ERROR 1045 (28000): Access denied for user 'userinforeignsystem'@'localhost' (using password: YES)
由于我无法从外部连接到其他服务器的 mysql 数据库,因此 ssh/端口转发是我进行开发的唯一方式。数据库用户权限和用户名/密码经过双重检查并且正确无误。我可以使用这些凭据在其他服务器上顺利登录。
艾伦。
编辑:如果我将用户名和密码替换为我自己的 mysql 用户名和密码并保留端口 3306,它会以某种方式连接到我自己的计算机 mysql - 我可以选择数据库并查看我自己的 mysql db 的表而不是 foreignserver.ip 内容。看起来它要么不关注端口,要么端口转发有问题,或者其他什么...
编辑2:
经过谷歌搜索后我找到了命令
sudo netstat -plntu
并使用它。当我删除不包括端口 3360 和 3306 的行时,只剩下那 2 行:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 8145/mysqld
tcp6 0 0 :::3306 :::* LISTEN 8080/ssh
这是否意味着,由于某种原因,尽管有 my.cnf,我的 mysql 却没有在 3360 上运行?
编辑3:localhost/phpmyadmin 变量也显示端口 3306 正在使用中..猜测这就是问题所在...
编辑4:同时 mysqladmin 变量命令显示端口为 3360。现在我没有主意了。
edit5:仔细检查my.cnf并发现设置端口的其他地方:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3360 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN -
tcp6 0 0 :::3306 :::* LISTEN -
现在 phpmyadmin 显示端口 3360 也已被使用。但是 shell 中的 mysql 命令仍然无法连接。
EDIT6 - 已解决。出于某种原因
mysql --host=localhost --port=3306 --user=userinforeignsystem --password=pwdthere
没有起作用,而
mysql --host=127.0.0.1 --port=3306 --user=userinforeignsystem --password=pwdthere
有效。如果有人能向我解释这一点,那么你就会教我一些有趣和新的东西:)
答案1
看起来你做的一切都是正确的,只是你尝试使用的用户没有从本地主机连接的权限。
SSH 隧道将使用端点掩盖您的 IP,在本例中它是本地主机,您可以通过多种方式解决这个问题。
尝试结束与同一网络中的另一台服务器的隧道,然后您将显示为从该服务器连接
sudo ssh -g -L3306:foreignserver.ip:3306[电子邮件保护]
为 localhost 用户添加权限,为 '%' 添加权限永远不会授予 localhost 权限
让我知道事情的后续!