# 本地到远程备份
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: 排除特定文件/目录
# 本地打包后传输
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
#!/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 {} \;
# 生成SSH密钥对(如果还没有)
ssh-keygen -t rsa -b 4096
# 将公钥复制到远程服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host
# 测试无密码登录
ssh user@remote_host
# 从远程恢复单个文件
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/
# 解压远程备份到本地
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
# 备份所有数据库
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
# 备份所有数据库
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
# 记录备份日志
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系统备份与恢复策略,确保在系统故障时能够快速恢复数据。