SSH+rsync实现服务器的自动备份

免密登录

ssh-keygen
ssh-copy-id root@hostname

使用 rsync 实现自动备份

#!/bin/bash
localDir=/root/halo/
remoteDir=/root/halo_backup
remoteIP=10.0.8.12
id=root

rsync -av -e 'ssh -p 5257' ${localDir} ${id}@${remoteIP}:${remoteDir} > /dev/null 2>&1

将任务加入 crontab

crontab -e
# 添加如下一条记录,每天 00:30 执行备份命令
30 0 * * * /root/rsync_ssh_backup_halo.sh

rsync 命令详解

从本地同步到远程

rsync -avz -e ssh /local/dir/ root@xx.xx.xx.xx:/remote/dir

rsync -avz -e 'ssh -p 2222' /local/dir/
 root@xx.xx.xx.xx:/remote/dir

两种方式的区别就是远程的ssh默认端口换了

从远程同步到本地

rsync -avzP -e ssh root@xx.xx.xx.xx:/remote/dir/ /local/dir

rsync -avzP -e 'ssh -p 2222' root@xx.xx.xx.xx:/remote/dir/ /local/dir

从目的目录中删除不必要的文件(在server端没有的文件)

rsync -avzP --delete -e ssh root@xx.xx.xx.xx:/remote/dir/ /local/dir

rsync -avzP --delete -e 'ssh -p 2222' root@xx.xx.xx.xx:/remote/dir/ /local/dir

注意:源路径的最后是否有斜杠有不同的含义:
有斜杠,只是复制目录中的文件;没有斜杠的话,不但要复制目录中的文件,还要复制目录本身!
目的路径的最后有没有斜杠,对传输没有影响!