插件窝 干货文章 如何通过SSH在Linux SysOps环境中备份与恢复数据

如何通过SSH在Linux SysOps环境中备份与恢复数据

备份 backup remote host 909    来源:    2025-04-11

通过SSH在Linux SysOps环境中备份与恢复数据

基本备份方法

1. 使用rsync进行增量备份

# 本地到远程备份
rsync -avz --progress -e ssh /path/to/local/dir user@remote_host:/path/to/backup/dir

# 远程到本地备份
rsync -avz --progress -e ssh user@remote_host:/path/to/remote/dir /path/to/backup/dir

# 常用选项:
# -a: 归档模式(保留权限、所有者等)
# -v: 详细输出
# -z: 压缩传输
# --delete: 删除目标中源不存在的文件
# --exclude: 排除特定文件/目录

2. 使用tar进行完整备份

# 本地打包后传输
tar czvf - /path/to/backup | ssh user@remote_host "cat > /backup/backup.tar.gz"

# 远程打包下载
ssh user@remote_host "tar czf - /path/to/remote/dir" > local_backup.tar.gz

高级备份策略

1. 自动化备份脚本示例

#!/bin/bash
# 定义变量
BACKUP_DIR="/backups"
DATE=$(date +%Y%m%d)
REMOTE_USER="backupuser"
REMOTE_HOST="backup.server.com"
REMOTE_DIR="/remote/backups"

# 创建本地备份目录
mkdir -p $BACKUP_DIR/$DATE

# 备份重要目录
tar czf $BACKUP_DIR/$DATE/etc_backup.tar.gz /etc
tar czf $BACKUP_DIR/$DATE/var_backup.tar.gz /var

# 数据库备份(MySQL示例)
mysqldump -u root -pPASSWORD --all-databases > $BACKUP_DIR/$DATE/mysql_backup.sql

# 使用rsync同步到远程
rsync -avz --delete -e ssh $BACKUP_DIR/$DATE $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR

# 清理7天前的本地备份
find $BACKUP_DIR -type d -mtime +7 -exec rm -rf {} \;

2. 使用SSH密钥认证实现无密码备份

# 生成SSH密钥对(如果还没有)
ssh-keygen -t rsa -b 4096

# 将公钥复制到远程服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host

# 测试无密码登录
ssh user@remote_host

数据恢复方法

1. 从rsync备份恢复

# 从远程恢复单个文件
rsync -avz -e ssh user@remote_host:/path/to/backup/file /path/to/restore

# 恢复整个目录
rsync -avz -e ssh user@remote_host:/path/to/backup/dir/ /path/to/restore/

2. 从tar备份恢复

# 解压远程备份到本地
ssh user@remote_host "cat /path/to/backup.tar.gz" | tar xzvf - -C /path/to/restore

# 或者先下载再解压
scp user@remote_host:/path/to/backup.tar.gz .
tar xzvf backup.tar.gz -C /path/to/restore

数据库备份与恢复

MySQL备份与恢复

# 备份所有数据库
ssh user@remote_host "mysqldump -u root -pPASSWORD --all-databases" > all_dbs_backup.sql

# 恢复所有数据库
mysql -u root -pPASSWORD < all_dbs_backup.sql

# 备份单个数据库
ssh user@remote_host "mysqldump -u root -pPASSWORD dbname" > dbname_backup.sql

PostgreSQL备份与恢复

# 备份所有数据库
ssh user@remote_host "pg_dumpall -U postgres" > pg_all_backup.sql

# 恢复所有数据库
psql -U postgres -f pg_all_backup.sql

# 备份单个数据库
ssh user@remote_host "pg_dump -U postgres dbname" > pg_dbname_backup.sql

安全注意事项

  1. 使用SSH密钥而非密码认证
  2. 限制备份用户的权限(使用sudo或特定用户)
  3. 加密敏感备份数据
  4. 定期验证备份的完整性
  5. 实施备份保留策略
  6. 考虑异地备份(至少3-2-1原则: 3份备份,2种介质,1份异地)

监控与日志

# 记录备份日志
rsync -avz --log-file=/var/log/backup.log -e ssh /path/to/backup user@remote_host:/backup

# 监控备份目录大小
ssh user@remote_host "du -sh /backup"

# 检查最近备份时间
ssh user@remote_host "ls -lt /backup | head"

通过以上方法,您可以建立一个可靠、安全的Linux系统备份与恢复策略,确保在系统故障时能够快速恢复数据。