Linux使用SSH隧道同步异地数据库文件的核心是通过加密隧道安全访问远程数据库服务,再用mysqldump逻辑备份或rsync同步冷备目录,而非直接拷贝运行中的物理文件。

Linux 使用 SSH 隧道同步异地数据库文件,核心不是直接“同步数据库文件”,而是通过加密隧道安全访问远程数据库服务(如 MySQL、PostgreSQL),再用标准工具导出/导入数据或做逻辑同步。数据库的物理文件(如 ibdata1、.frm)通常不能跨环境直接拷贝,尤其在运行中——容易损坏、不一致。所以真正安全、可行的做法是:走 SSH 隧道连接数据库服务,再执行 dump / restore 或 rsync + 逻辑备份。
一、先建好 SSH 隧道连上数据库服务
假设你要从本地机器安全访问远端内网数据库(比如 MySQL 运行在 10.10.20.5:3306),中间需经跳板机(jump-host.com),可用本地端口转发:
-
命令示例:
ssh -L 3307:10.10.20.5:3306 user@jump-host.com -i ~/.ssh/id_rsa - 成功后,本地
localhost:3307就等价于远端数据库地址,所有流量经 SSH 加密 - 建议加
-N(不执行远程命令)和-f(后台运行),避免终端占用:ssh -N -f -L 3307:10.10.20.5:3306 user@jump-host.com
二、用 mysqldump + 隧道做逻辑备份同步
这是最常用、最安全的方式,适合定期异地备份或迁移:
- 本地执行导出(走隧道):
mysqldump -h 127.0.0.1 -P 3307 -u dbuser -p database_name > backup.sql - 导出后可压缩、加密、rsync 到异地服务器:
gzip backup.sql && rsync -avz backup.sql.gz user@backup-server:/backup/ - 恢复时反向操作:把
backup.sql.gz拷回,解压后通过隧道导入:zcat backup.sql.gz | mysql -h 127.0.0.1 -P 3307 -u dbuser -p database_name
三、用 rsync 同步数据库备份目录(需提前停库或使用 --single-transaction)
如果必须同步物理文件(如定期归档冷备),确保数据库已停止或使用一致性快照(如 LVM、xtrabackup),再通过 SSH 隧道底层通道 rsync:
- rsync 默认走 SSH,天然加密:
rsync -avz --delete /var/lib/mysql/ user@backup-server:/backup/mysql/ - 若备份服务器只开放跳板机访问,可在跳板机上配置 rsync over SSH 或用
-e "ssh -o ProxyJump=jump-host"(需 SSH config 支持) - 注意:MySQL 数据目录直接 rsync 有风险,务必确认无写入、或使用 Percona XtraBackup 等热备工具生成一致性备份后再同步
四、自动化与稳定性保障
生产环境别依赖手动隧道,推荐:
- 用
~/.ssh/config配置跳转:Host db-tunnel<br> HostName 10.10.20.5<br> Port 3306<br> User dbuser<br> ProxyJump jump-host
,然后ssh -L 3307:localhost:3306 db-tunnel - 隧道挂掉会中断备份,可用监控脚本自动拉起(如你知识库里的
ssh_tunnel_monitor.sh) - 备份任务建议用 cron + 日志记录 + 校验(如
md5sum或sha256sum)


















