这里写自定义目录标题
- rsync作用
- rsync用法
- scp /cp/rsync区别
- ssh无密码登陆原理
- 远程备份案例
- 远程备份脚本
- 脚本1:
- 脚本2
- 本地备份
- 常用参数
rsync作用
实现本地或远程 全量备份 增量备份
rsync用法
rsync -avz 本机文件夹 远程主机用户名@IP:远程主机文件夹
scp /cp/rsync区别
ssh无密码登陆原理
首先在客户端上创建一对公私钥 (公钥文件:~/.ssh/id_rsa.pub; 私钥文件:~/.ssh/id_rsa)
然后把公钥放到服务器上(~/.ssh/authorized_keys), 自己保留好私钥
当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了
通俗:访问谁就把公钥发送给谁
远程备份案例
一、实验环境:
1、centos-A网站服务器:192.168.0.101/24
提前准备好网站源代码和数据库
2、centos-B备份服务器:192.168.0.102/24
二、ssh客户端centos-A生成公钥和私钥对
ssh-keygen -t rsa 命令生成一个文件对 (非对称加密算法)
id_rsa 私钥文件
id_rsa.pub 公钥文件
三、把centos-A上公钥传输一份到centos-B服务器
把id_rsa.pub传到centos-B服务器
ssh-copy-id -i .ssh/id_rsa.pub 192.168.0.102
四、无口令登陆测试
ssh 192.168.0.102
五、使用rsync借助ssh无口令远程备份到centos-B服务器上指定目录
rsync -e ssh -avz /mnt root@192.168.0.102:/home/webserver
远程备份脚本
脚本1:
cat >> /root/rsync.sh << EOF
#!/bin/bash
remotedir=/home/backup #备份到远程主机的目录(必须存在)
basedir=/backup/ #本地需要备份的目录
host=192.168.0.28 #备份到远程主机
user=root #使用root身份(当然也可以使用普通用户身份)
rsync -av -e ssh {user}@host:{remotedir}
EOF
#chmod 700 rsync.sh
#./rsync.sh
back.sh
mk.sh
rsync.sh
sent 2288 bytes received 73 bytes 277.76 bytes/sec
total size is 2056 speedup is 0.87
看到这个你就可以确定备份成功了
远程主机查看一下:
[root@node4 backup]# ls
back.sh mk.sh rsync.sh weekly
成功备份
现在,你可以放心的将此脚本应用在你的环境了,为了保障系统的实时备份,此时,可以将脚本加入crontab中
[root@node1 backup]# crontab -e
*/5 * * * * /backup/rsync.sh > /dev/null
ok,现在就会每5分钟进行一次远程备份了!
脚本2
#!/bin/bash
#description for rsync to backup data
#到目标服务器102已经做了ssh免密登陆
#常用变量
time=`date +%Y-%m-%d`
backdir="/mnt/${time}"
back_webdir="${backdir}/web"
back_datadir="${backdir}/data"
webdir="/usr/local/apache/htdocs/myshop"
mysql_conn="/usr/local/mysql/bin/mysqldump -uroot -p123 myshop"
#创建目录
mkdir -p ${back_webdir}
mkdir -p ${back_datadir}
#复制网站目录
rsync -r ${webdir} ${back_webdir} &> /dev/null
#导出数据库sql语句
${mysql_conn} > "${back_datadir}/myshop.sql" &>/dev/null
#目标目录压缩完成
zip -r ${backdir}.zip ${backdir} &>/dev/null
#源目录删除完成
rm -rf ${backdir}
#把数据远程传输到Centos-B服务器指定目录下完成
rsync -e ssh -az ${backdir}.zip 192.168.0.102:/mnt
本地备份
rsync -r -v --ignore-existing /tmp/a/ /tmp/b "
将脚本加入crontab中
–ignore-existing"是更新目标端不存在的文件
把目录a 下的所有内容放到目录b 下