You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何经SSH跳板机简便导出目标服务器MySQL dump

跨跳板机最简MySQL压缩导出方案

核心思路是利用SSH原生跳转能力做流式管道传输,全程不在跳板机、目标服务器落地临时文件,压缩操作在源数据库服务器完成,压缩后的数据直接通过隧道传到本地,完全规避多步中转、重复拷贝、临时文件清理的冗余操作,且完全匹配所有约束条件。


单命令直出方案(推荐)

你只需要在本地计算机执行单条命令即可完成全流程,不需要分步登录任何中转节点:

ssh -J <跳板机账号>@<跳板机IP> <目标服务器账号>@<目标数据库服务器IP> "mysqldump -u<数据库账号> -p<数据库密码> <待导出库名> | gzip -9" > <本地保存路径>/db_dump.sql.gz

命令逻辑说明

  • -J 是SSH 7.3及以上版本原生支持的ProxyJump参数,会自动通过跳板机建立到目标服务器的加密隧道,跳板机仅做加密流量转发,不会读写传输内容,不需要跳板机安装任何MySQL组件、压缩工具,也不需要你在跳板机做任何配置/安装操作,完全符合跳板机的权限限制。
  • 引号内的操作全部在目标数据库服务器上执行:mysqldump生成的转储数据流不落地写文件,直接通过管道传给gzip做最高等级压缩,300-450MB的原始dump文件压缩后通常为30-60MB,完全满足低带宽下必须压缩传输的要求。
  • 压缩后的数据流全程通过SSH隧道流式传输到本地,直接写入本地磁盘的压缩包文件,目标服务器、跳板机上都不会生成任何临时中转文件,省掉两次scp拷贝、多节点清理临时文件的步骤。

低版本SSH兼容写法

如果你的本地SSH版本低于7.3(不支持-J参数),可以用ProxyCommand实现完全一致的效果:

ssh -o ProxyCommand="ssh <跳板机账号>@<跳板机IP> -W %h:%p" <目标服务器账号>@<目标数据库服务器IP> "mysqldump -u<数据库账号> -p <待导出库名> | gzip -9" > <本地保存路径>/db_dump.sql.gz

把-p后面的数据库密码去掉后,执行命令时会交互式提示你输入数据库密码,避免密码留存在命令行历史中。


按需调整的变体方案

  • 需要本地直接拿到未压缩SQL文件:传输过程依然保持压缩不占额外带宽,本地落地时自动解压:
    ssh -J <跳板机账号>@<跳板机IP> <目标服务器账号>@<目标数据库服务器IP> "mysqldump -u<数据库账号> -p <待导出库名> | gzip -9" | gunzip > <本地保存路径>/db_dump.sql
    
  • 目标服务器无gzip:替换为目标服务器自带的其他压缩工具即可,比如用压缩率更高的xz就把管道段改成| xz -T0,本地保存文件后缀对应改成.xz即可。
  • 导出全库/多库:给mysqldump加对应参数即可,比如导出全库用--all-databases,导出多库用--databases 库1 库2,管道压缩逻辑不受影响。

低带宽场景注意事项

  • 不需要额外开启SSH自带的-C压缩参数:我们已经在源端做了高压缩率的gzip压缩,对已压缩的流量再开SSH压缩只会额外消耗两端CPU,不会再降低传输体积。
  • 导出完成后可以在本地执行gunzip -t <压缩包路径>校验压缩包完整性,避免链路闪断导致文件损坏。

对比原来的7步操作,这个方案全程只需要你在本地执行1条命令,等待传输完成即可,没有任何冗余的手动操作。

内容的提问来源于stack exchange,提问作者Hevyweb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:54:26