这个命令不经常用,最近 在公司的服务器正常了,要把部门的博客做好备份,研究下鹏哥给的这个命令先,这里我只说linux下的,windows下大伙自己再去找找吧,如下,细品。
 
 
一、什么是rsync
 
rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。 rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。
 
rsync 包括如下的一些特性:
1、能更新整个目录和树和文件系统;
2、有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
3、对于安装来说,无任何特殊权限要求;
4、对于多个文件来说,内部流水线减少文件等待的延时;
5、能用rsh、ssh 或直接端口做为传输入端口;
6、支持匿名rsync 同步文件,是理想的镜像工具;
 
 
二、我的需求与实现思路
 
1、我的需求
每天凌晨定时备份公司博客的数据库和博客的图片,其他不动。
 
2、实现思路
方案1、准备一台空闲服务器,定时将博客服务器的文件备份到此空闲服务器;
方案2、将博客服务器文件定时备份到百度云网盘;(我自己的博客用的就是这个方案,定时将数据库脚本及博客图片等内容备份到自己的百度云盘)
 
这两个方案中,方案一是肯定要执行的,方案二这个由于百度停止了新的接口应用的申请,用我自己的账号不是很好,所以方案二暂时不搞了,后续可能搞到自己公司的云盘中。
 
 
三、我实现的脚本
 
先上脚本(公司脚本里的抬头,我改为自己博客的了,下面的脚本里面的路径、数据用户名和密码等要改成自己的哈):

#!/bin/sh
#
#用时间撮作为文件名
FILENAMETIME=$(date '+%Y%m%d_%H_%M_%S')
echo $FILENAMETIME
#
#导出的数据库的名称
CFEI_DB_FILE='cfei_net_db_'$FILENAMETIME'.gz'
#
#导出的博客的图片的名称
CFEI_BLOG_FILE='cfei_net_blog_'$FILENAMETIME'.tar.gz'
echo $CFEI_DB_FILE
echo $CFEI_BLOG_FILE
#
#导出数据库脚本并压缩
mysqldump -u用户 -p密码 数据库名 |gzip > /tmp/backup/$CFEI_DB_FILE
#
#博客里图片的压缩,这里面的路径要根据你自己的路径进行修改
tar -zcvf /tmp/backup/$CFEI_BLOG_FILE /var/default/blog/
#
#
#这里开始进行同步数据到另外一台备份服务器上,这里需要无密钥登录,配置请看第四点
#下面这句的意思是将/tmp/backup/目录下的所有文件同步到150的那台机器的/home/blogbackup/下
rsync -avz -e ssh /tmp/backup/ root@192.168.1.150:/home/blogbackup/

 
 
rsync命令格式:

rsync (option) 源路径 目标路径
其中:
(option):
a:使用archive模式,等于-rlptgoD,即保持原有的文件权限
z:表示传输时压缩数据
v:显示到屏幕中
e:使用远程shell程序(可以使用rsh或ssh)
--delete:精确保存副本,源主机删除的文件,目标主机也会同步删除
--include=PATTERN:不排除符合PATTERN的文件或目录
--exclude=PATTERN:排除所有符合PATTERN的文件或目录
--password-file:指定用于rsync服务器的用户验证密码

 
 
四、无密钥登录
 
这里配置的无密钥登录,只需要博客所在的服务器能无密钥连到备份服务器即可,博客服务器用的ubuntu的server版,导出我操作的history记录如下:
 

  156  cd /root/.ssh/
  157  ls
  158  ssh-keygen -t rsa      #这一步按回车按回车就行,切记不要输入字符
  159  ls
  160  cat id_rsa.pub >> authorized_keys 
  161  scp authorized_keys root@192.168.1.150:/root/.ssh/      #这里的  root下的 .ssh 目录一定要存在,如果不存在,新建一个即可
  162  ssh 192.168.1.150   #这里不需要输入密码即为配置无密钥成功

 
 
五、定时操作,我这里用的是linnx的crontab定时执行脚本
 
这里crontab的设置有两种,分别如下:
1、直接在终端输入crontab -e 输入:59 23 * * * /home/backup.sh
2、编辑/etc/crontab文件,在最后加入:59 23 * * * root /home/backup.sh
 
 
解释一下,定时的命令为每天晚上的23点59分执行/home/backup.sh脚本,也就是上面写好的脚本;
第一种方式用crontab -l命令能查到,但是第二种命令用这个命令查不到;
第二张方式在时间跟脚本中间要输入用户名,也就是上面红色加粗部分
 
 
 
crontab格式说明图示如下:

[rsync ssh数据同步][linux rsync][linux rsync命令][crontab定时执行脚本][ssh无密钥登录配置]-飞网

crontab格式说明图片

 
 
[rsync ssh数据同步][linux rsync][linux rsync命令][crontab定时执行脚本][ssh无密钥登录配置]-飞网
 
 
OK啦,备份搞定啦,这里涉及到的东西不少,有无密钥登录的设置、数据库导出压缩、数据同步等等小技术,自己操作试下能领会的肯定不少。