linux远程数据库备份核心是ssh免密登录后在远程执行导出再下载:先ssh-keygen与ssh-copy-id配置免密,再ssh执行mysqldump/pg_dump导出(建议用配置文件避免密码明文),最后scp拉取备份文件,可整合为带连通性检查、时间戳命名和错误退出的一键脚本。

Linux 下用 SSH 远程导出数据库备份,核心思路是:不直接从本地连数据库(可能受限于 IP 白名单),而是通过 SSH 登录到远程服务器,在其本地执行数据库导出命令,再把生成的备份文件拉回本地。整个过程分三步:免密登录 → 远程执行导出 → 下载备份文件。
配置 SSH 免密登录
这是自动化前提,避免每次输密码:
- 在本地机器运行
ssh-keygen -t rsa(一路回车,默认生成~/.ssh/id_rsa和id_rsa.pub) - 执行
ssh-copy-id user@remote_ip -p port(如端口不是 22,必须加-p) - 验证是否成功:
ssh user@remote_ip -p port "hostname",能直接返回主机名即通
在远程服务器上执行数据库导出
导出命令需在远程服务器环境内运行,注意路径、权限和用户权限:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- MySQL 示例:
ssh user@remote_ip -p port "mysqldump -u root -p'password' dbname > /tmp/db_backup.sql" - PostgreSQL 示例:
ssh user@remote_ip -p port "pg_dump -U postgres -d dbname > /tmp/db_backup.sql" - 为防止密码明文暴露,建议使用配置文件(如
~/.my.cnf)或临时启用无密码访问(仅限可信环境) - 若需压缩节省传输量,可追加:
... | gzip > /tmp/db_backup.sql.gz
把备份文件下载到本地
导出完成后,用 scp 或 rsync 拉取文件:
- 下载单个文件:
scp -P port user@remote_ip:/tmp/db_backup.sql ./ - 下载并重命名:
scp -P port user@remote_ip:/tmp/db_backup.sql.gz ./backup_$(date +%Y%m%d).sql.gz - 如果导出的是压缩包,本地解压:
gunzip backup_*.sql.gz
整合成一键脚本(推荐)
把上面步骤写成 shell 脚本,提高复用性与可靠性:
- 脚本中先检查 SSH 连通性,再执行导出,最后校验文件大小是否非零
- 用
date动态生成带时间戳的文件名,避免覆盖 - 加上
set -e让任意命令失败时退出,防止静默出错 - 示例片段:
ssh $USER@$HOST -p $PORT "mysqldump -u $DB_USER -p'$DB_PASS' $DB_NAME | gzip > /tmp/backup_$(date +\%Y\%m\%d_\%H\%M).sql.gz" && scp -P $PORT $USER@$HOST:/tmp/backup_*.sql.gz ./










