如何允许远程 MySQL 访问单个静态 IP?

Cod*_*aft 7 mysql linux

我正在尝试通过端口 3306 启用对 MySQL 的远程访问,但没有运气。我已获得对生产机器的 root 访问权限,以便我可以获取文件和数据库,在本地处理它们,并将修改后的版本放回原处。

我的访问权限允许我通过 SSH 进入该框,并允许通过 SSH 进行 FTP。我现在正在尝试通过 SSH 访问 MySQL。MySQL 正在运行(在本地侦听)并且可以在命令行上访问并且可以毫无问题地访问它。

我意识到我可以转储数据库,在本地恢复文件并执行我的修改。但是,将来我可能需要更改一些内容,我宁愿不必在命令行上这样做,因为通过 GUI 会更快。或者如果我可以像我想要的那样连接。

acu*_*ich 3

编辑:对于以下说明,如果您使用的是 Windows,则需要记住两件事:

1) 更改localhost为,127.0.0.1因为 Windows 没有在%SystemRoot%\system32\drivers\etc\hosts.

2) 您可以使用PuTTY工具套件中鲜为人知的plink.exe命令行工具;它使用与命令相同的选项语法,因此如果您在下面的示例中替换为它应该一切正常。sshsshplink.exe


您需要使用 SSH 隧道将客户端上的本地端口转发到服务器上的 mysql 端口。您可以通过以下方式做到这一点:

% ssh -f -N -L3306:localhost:3306 username@remoteserver
% mysql -h remoteserver -u mysqluser -p
Run Code Online (Sandbox Code Playgroud)

ssh的选项含义:

-f Requests ssh to go to background just before command execution.
-N Do not execute a remote command.
-L [bind_address:]port:host:hostport
   Specifies that the given port on the local (client) host is to be 
   forwarded to the given host and port on the remote side.
Run Code Online (Sandbox Code Playgroud)

使用-f -N还意味着您将在后台分叉一个 ssh 进程,而不是像登录远程 shell 时通常那样保持与远程主机的连接。如果你想拆除隧道,你可以像这样终止客户端上的 ssh 进程:

% pgrep -fl ssh
11145 ssh -f -N -L3306:localhost:3306 username@remoteserver
% kill -9 11145
Run Code Online (Sandbox Code Playgroud)

当然,在这种情况下11145是 ssh 进程的 PID,每次启动新的 ssh 进程来打开隧道时,该 PID 都会不同。

另外,这假设您的客户端上没有运行 mysql 服务器。如果是这样,您需要更改绑定的本地端口,如下所示:

% ssh -f -N -L3333:localhost:3306 username@remoteserver
% mysql -P 3333 -h remoteserver -u mysqluser -p
Run Code Online (Sandbox Code Playgroud)

端口3333是任意的;您可以选择您的客户端拥有的任何免费端口号。