最省事方案是mysqldump | gzip | ssh管道直传,不占本地磁盘、不生成中间文件,适合大库;需本地留档或断点续传则选scp/rsync分步传输。

直接用 mysqldump + ssh 管道传输最省事,不占本地磁盘、不生成中间文件,适合大库;但网络中断就全重来。需要本地留档或断点续传,就选 scp 或 rsync 分两步走。
用 mysqldump | ssh 一次性直传(推荐大库/空间紧张时)
本质是让 mysqldump 的输出不落地,直接通过 SSH 流式写入远程文件。压缩必须加在管道里,否则传输体积大、耗时长。
mysqldump -u root -p'pass' mydb | gzip | ssh user@192.168.1.100 "cat > /backup/mydb_$(date +%Y%m%d_%H%M%S).sql.gz"- 远程路径必须有写权限,
user需对目标目录有write权限,否则报Permission denied - 别用
sudo在远程侧提权写文件——SSH 连接用户权限决定写入能力,临时提权反而引入安全风险 - 如果远程服务器禁用了
ssh的非交互式命令执行(比如ForceCommand或AllowTcpForwarding no),这条命令会卡住或失败
先本地备份再 scp 上传(适合需本地存档或网络不稳定)
分两步:先 dump 压缩到本地临时路径,再用 scp 传过去。好处是可校验、可重试、不依赖单次连接稳定性。
- 本地备份:
mysqldump -u root -p'pass' mydb | pigz -p4 > /tmp/mydb_$(date +%Y%m%d_%H%M%S).sql.gz(pigz比gzip快,多核并行) - 上传:
scp /tmp/mydb_*.sql.gz user@192.168.1.100:/backup/ - 注意:
scp不支持断点续传,传一半断了就得重来;大文件建议改用rsync --partial --progress - 若提示
command not found: pigz,说明远程没装——但没关系,scp只负责传文件,解压是后续操作
用 rsync 增量同步备份目录(适合定期轮转、节省带宽)
rsync 不传整个文件,只传差异块,配合 --delete-after 和时间戳命名,能自然实现“保留 N 个最新备份”的策略。
- 假设本地备份都放在
/data/backups/mysql/,远程目录是/backup/mysql/:rsync -avz --delete-after -e "ssh -o StrictHostKeyChecking=no" /data/backups/mysql/ user@192.168.1.100:/backup/mysql/ -
--delete-after是关键:先同步新文件,再删远程多余旧文件,避免同步中途被删导致空目录 - 远程
rsync服务不用开——这里走的是 SSH 通道,只要远程装了rsync命令即可(CentOS 默认不装,需yum install rsync) - 若远程磁盘快满,
rsync会报No space left on device,此时得先清理或扩盘,它不会自动跳过
常见错误和权限踩坑
所有方式都绕不开 SSH 登录和远程写入权限,这两个点出问题频率最高。
-
ssh: connect to host 192.168.1.100 port 22: Connection refused→ 检查远程sshd是否运行:systemctl status sshd -
Permission denied (publickey)→ 不是密码错了,是没配好密钥;确认~/.ssh/id_rsa.pub已用ssh-copy-id推到远程~/.ssh/authorized_keys - 远程写入失败但 SSH 成功 → 检查目标路径父目录权限:
ls -ld /backup,确保user对该目录有w权限,不是只对子目录有 -
mysqldump: Got error: 1045: Access denied for user→ MySQL 密码含特殊字符(如$、!)没被 shell 正确转义,改用配置文件方式更稳妥:mysqldump --defaults-extra-file=/etc/mysql/backup.cnf mydb
真正麻烦的从来不是命令怎么写,而是远程目录权限、SSH 密钥信任链、MySQL 认证方式这三处细节——它们不出错时一切丝滑,一出错就卡在黑盒里半天。动手前先手动 ssh user@host 'ls -l /backup' 和 ssh user@host 'mysql -u test -ptest -e "select 1"' 验证通路,比盲目重试快得多。


















