如何从本地机器mysqldump远程数据库

Mau*_*sen 157 mysql mysqldump

我需要在远程服务器上执行数据库的mysqldump,但是服务器没有安装mysqldump.我想在我的机器上使用mysqldump连接到远程数据库并在我的机器上进行转储.

我试图创建一个ssh隧道,然后进行转储,但这似乎不起作用.我试过了:

ssh -f -L3310:remote.server:3306 user@remote.server -N
Run Code Online (Sandbox Code Playgroud)

隧道创建成功.如果我做

telnet localhost 3310
Run Code Online (Sandbox Code Playgroud)

我得到一些显示正确的服务器mysql版本的模糊.但是,执行以下操作似乎尝试在本地连接

mysqldump -P 3310 -h localhost -u mysql_user -p database_name table_name
Run Code Online (Sandbox Code Playgroud)

Wri*_*ken 224

因为我还没有在serverfault上看过它,答案很简单:

更改:

ssh -f -L3310:remote.server:3306 user@remote.server -N
Run Code Online (Sandbox Code Playgroud)

至:

ssh -f -L3310:localhost:3306 user@remote.server -N
Run Code Online (Sandbox Code Playgroud)

并改变:

mysqldump -P 3310 -h localhost -u mysql_user -p database_name table_name
Run Code Online (Sandbox Code Playgroud)

至:

mysqldump -P 3310 -h 127.0.0.1 -u mysql_user -p database_name table_name
Run Code Online (Sandbox Code Playgroud)

(不要使用localhost,它是这些'特殊含义'的废话之一,可能通过套接字而不是端口连接)

编辑:嗯,详细说明:如果主机设置为localhost,--socket则假定配置(或默认)选项.请参阅手册,了解寻找/使用的选项文件.在Windows下,这可以是命名管道.

  • 注意:`localhost`通常默认为`:: 1` IPv6,而不是`127.0.0.1`. (2认同)

Ond*_*ert 81

您可以在本地针对远程服务器调用mysqldump.

对我有用的例子是:

mysqldump -h hostname-of-the-server -u mysql_user -p database_name > file.sql
Run Code Online (Sandbox Code Playgroud)

我只是关注连接选项的mysqldump 文档.

  • 重要的是要记住,`-p` 用于密码参数 - 而不是数据库名称。但是以纯文本形式存储它是不安全的,因此添加“-p”意味着您将在登录时提示输入密码。也许只有我一个人在使用 `mysql`,因此就命令行参数而言,`mysql` 转储语法从来都不是那么直接。 (9认同)
  • 之前无需再打开ssh隧道。+1 (5认同)
  • 进入VPN怎么样?还是从您通过SSH访问的计算机上进行转储,该计算机可以访问数据库计算机?该端口不需要是公共的。 (4认同)
  • 这很危险,非常危险。它要求mysql的端口向公众开放。这很容易被机器人强行强迫。 (2认同)