[rsync ssh数据同步][linux rsync][linux rsync命令][crontab定时执行脚本][ssh无密钥登录配置]
这个命令不经常用,最近 在公司的服务器正常了,要把部门的博客做好备份,研究下鹏哥给的这个命令先,这里我只说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格式说明图示如下:
OK啦,备份搞定啦,这里涉及到的东西不少,有无密钥登录的设置、数据库导出压缩、数据同步等等小技术,自己操作试下能领会的肯定不少。