通过SSH隧道连接时MySQL访问被拒绝错误
在MySQL中,该localhost
关键字保留给使用MySQL套接字的连接,你应该使用ip-address127.0.0.1
来实现与127.0.0.1上的MySQL网络端口的TCP连接。这意味着服务器必须同时从专门向用户授予特权127.0.0.1
,并且客户端必须使用-h 127.0.0.1
来通过隧道而不是连接到本地套接字。
要允许你使用SSH端口转发进行访问,你需要以下内容:
GRANT SELECT ON *.* TO user@`127.0.0.1`
然后运行
FLUSH PRIVILEGES;
并且可能
FLUSH QUERY CACHE;
如果仍然不起作用,请重新启动服务器进程。
在反向DNS查找后,错误消息127.0.0.1中的内容会转换为localhost
调试困难。
如手册所述:
在Unix上,MySQL程序对主机名localhost进行特殊处理,与其他基于网络的程序相比,它可能与你期望的不同。为了连接到localhost,MySQL程序尝试使用Unix套接字文件连接到本地服务器。即使给定了-
-port
或-P
选项来指定端口号,也会发生这种情况。为确保客户端与本地服务器建立TCP / IP连接,请使用--host
或-h
将主机名值指定为127.0.0.1
,或者使用本地服务器的IP地址或名称。你还可以通过使用该--protocol=TCP
选项来显式指定连接协议,即使是本地主机也是如此。例如:
shell> mysql --host=127.0.0.1
shell> mysql --protocol=TCP
该
--protocol
选项使你可以建立特定类型的连接,即使其他选项通常默认为某些其他协议也是如此。
啊! 这就解释了为什么我希望看到127.0.0.1时在错误消息中看到localhost。不管怎样,root用户已被授予@ 127.0.0.1的所有特权,但是通过SSH隧道连接时,我仍然收到拒绝访问错误。我跑的确切陈述是:
grant all on *.* to 'root'@'127.0.0.1' with grant option;
我遇到了这个问题,很明显这确实是主机与套接字的问题。当我
ssh -h 127.0.0.1 -u root -p
在服务器上远程键入时,连接也会被拒绝。我
-h 127.0.0.1
通过重新启动mysql解决了服务器上的连接失败,但是ssh套接字仍然无法正常工作开始了。1.服务器必须授予@ 127.0.0.1。直到我重新启动服务器,这才对我有用。2.本地连接必须是127.0.0.1而不是localhost,以便使用隧道而不是本地套接字
拷贝转自:https://www.nuomiphp.com/serverfault/zh/60374ba13630102b7e6daf38.html