2012/02/15,按毕哥(http://hi.baidu.com/%B1%CF%D0%C2%C4%CF/home)的要求和小胜胜做服务器间定时备份,一直到18号才真正按照要求 用rsync和lftp两种方式实现. 旺旺(http://kongjian.baidu.com.cn/%D6%D9%D0%CB%CD%FA/home)已经做出来啦. 现在看看10分钟的过程,当时用了整整4天时间. 笨,笨,笨···
用rsync,crontab实现Linux服务器间的定时备份
用到的博客文章
http://blog.163.com/fancy_duan/blog/static/9700682011291220923/
http://www./2004/0906/A20040906340enet.com.cn/article768_2.shtml
用到的书:
《鸟哥的Linux私房菜 服务器架设篇(第二版)》第13章 远程联机服务器 13.8 用rsync进行同步镜像备份
《Linux服务器配置全程实录》第14章 配置SSH服务器 14.3客户端访问 14.3.1 4通过密钥方式远程登录
环境: 服务器A1 IP:211.64.33.129 操作系统:CentOS 5.5
服务器A2 IP:211.64.33.130 操作系统:CentOS 5.5
服务器B IP:211.64.33.131 操作系统:CentOS 5.5
要求: 把服务器A1,A2的数据,备份到B服务器下的不同用户目录.
思路: 在服务器B上建立用户B1,B2,使服务器A1的数据备份到用户B1,服务器A2的数据备份到用户B2.
在服务器A1,A2中用crontab(定时命令)执行shell脚本,脚本中写入rsync命令。
步骤:
在服务器B上操作:
>1 查看rsync包是否安装
[root@B~]# rpm -qa|grep rsynv
rsync-3.0.6-4.el5_7.1
查看/etc/services有下面两行
rsync 873/tcp # rsync
rsync 873/udp # rsync
在服务器A1,A2上操作(以服务器A1为例):
配置ssh的非交互世登录
>2 在A1上生成一对密钥(用root用户执行)
[root@A1~]ssh-keygen -t rsa
Generation public/private rsa key pair.
Enter file in which to save the key(/root/.ssh/id_rsa): (密钥存放目录)
Enter passphrase(empty for no passphrase): (口令为空)
Enter same passphrase again:
Your identiflcation has been save in /root/.ssh/id_rsa. (私钥)
Your public key has been saved in /root/.ssh/id_ras.pub. (公钥)
The key fingerprint is:
c3:a0:de:f8:24:8e:f6:0d:ed:0a:b0:a2:2d:aa:d3:8b
>3 分别把服务器A1,A2上生成的公钥传到服务器B上的用户B1,B2(以服务器A1把公钥传服务器B上的B1用户为例):
[root@A1~]# scp .ssh/id_dsa.pub
password: (enter password, not new passphrase!)
id_dsa.pub 100% ***************************** 614 00:00
在服务器B上,分别用B1,B2用户操作(以B1用户为例)
>4 将b.pub文件的内容附加到用户B1 .ssh/authorized_keys文件
[B1@B~]$ cat b.pub >> ./ssh/authorized_keys
>5 出于安全性,修改.ssh文件,authorized_keys文件权限,并将b.pub文件删除
[B1@B~]$ chmod 700 .ssh
[B1@B~]$ chmod 600 ./ssh/authorized_keys
[B1@B~]$ rm b.pub
在服务器A1,A2上操作(以A1为例)
>6 使ssh 程序可以请求一个已经解密了的密钥
[root@A1~]# ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-XX1O24LS/agent.14179; export SSH_AUTH_SOCK;
SSH_AGENT_PID=14180; export SSH_AGENT_PID;
echo Agent pid 14180;
>7 使ssh免口令登录,即不用输入在服务器A1上生成密钥时的口令
(当时设置口令为空,但设置口令为空不安全)
[root@A1~]#ssh-add
Identity added: root/.ssh/id_dsa
>> 如果输入ssh-add
出现 Could not open a connection to your authentication agent
则
[root@A1~]# ssh-agent /bin/bash
[root@A1~]#ssh-add
[ 现在可以试一下用在服务器A1,A2上可以不用密码直接ssh登录到服务器B上的B1,B2用户.
[root@A1~]# ssh
[root@A2~]# ssh
在服务器A1上生成密钥,并把公钥传导服务器B上的B1用户目录下.
只可以实现在服务器A1上无密码ssh登录到服务器B上的B1用户.不能反向登录.
]
脚本化备份过程
>8 在服务器A1,A2上各编写一个备份脚本backup.sh,放在/root/sh/下(以服务器A1为例)
#!/bin/sh
TARGET_DIR=
for SOURCE_DIR in " "
do
echo “Backing up $SOURCE_DIR …”
rsync -av -e ssh $SOURCE_DIR : $TARGET_DIR
done
[root@A1 sh]# chmod 755 backup.sh
在服务器A1,A2上以root用户执行(以服务器A1为例)
>9 设置定时任务(crontab)
[~]# crontab -e
00 1 * * * /bin/sh /sh/back.sh (每天凌晨1点执行back.sh)
[可以设置每分钟执行一次脚本检验一下
*/1 * * * * /bin/sh /sh/back.sh
]