YJ的博客
个人生活、工作的随笔

本站部分文章、资源来自互联网,版权归原作者及网站所有,如侵犯了您的权利,请及时致信告知我

粤ICP备15050546号

网站地图

Linux下利用rsync每日增量备份网站数据

上一篇文章提到利用ssh-keygen+ssh-copy-id免密码ssh登陆vps的,结合本篇文章可以实现无人值守全自动每日备份网站数据。
在Linux下利用ssh-keygen+ssh-copy-id实现免密码ssh登陆访问:http://www.aboutyj.com/ssh-copy-id.html

环境:CentOS6 x86_64、ubuntu 14.04 (这两个系统均测试过,其他系统请自己尝试)
主机1:网站存放机器 192.168.100.101
主机2:备份代码机器 192.168.100.102
以下为利用CentOS6的实作过程

下面配置全部在主机1即网站存放的机器上执行
一、安装rsync服务

1、CentOS6 执行yum安装
安装rsync服务前建议执行yum update -y全面更新系统,以免出现问题
[php][root@iZ94kalfrmmZ ~]# yum install rsync -y[/php]
等待安装完成
2、Ubuntu 执行apt-get安装
[php][root@iZ94kalfrmmZ ~]# sudo apt-get install rsync[/php]
等待安装完成

二、执行数据库备份
1、既然是要实现全自动,那么就不可能通过手动执行mysqldump来备份
下面分享一个备份数据库的脚本
下载地址:
mysqlbackup.sh
也可以直接在vps上创建下面的脚本
[php][root@iZ94kalfrmmZ ~]# vi mysqlbackup.sh[/php]
将下面内容复制到mysqlbackup.sh中并修改相关参数保存即可
[php]#!/bin/bash
id="root" #用户名
pwd="******" #密码
dbs="database1 database2" #数据库名字的列表,多个数据库用空格分开。
backuppath="/backup/mysqlbackup" #保存备份的位置,建议放在一个rsync可以备份到的位置,方便把数据库一并备份下来
day=7 #保留最近几天的备份
[ ! -d $backpath ] &&mkdir -p $backuppath #判断备份目录是否存在,不存时新建目录。
cd $backuppath #转到备份目录,这句话可以省略。可以直接将路径到命令的也行。

backupname=mysql_$(date +%Y-%m-%d) #生成备份文件的名字的前缀,不带后缀。
for db in $dbs; #dbs是一个数据名字的集合。遍历所有的数据。
do
mysqldump -u$id -p$pwd -S /var/lib/mysql/mysql.sock $db >$backupname_$db.sql #备份单个数据为.sql文件。放到当前位置
if [ "$?" == "0" ] #$? 得到上一个shell命令的执行的返回值。0表示执行成功。其他表示错误。并将将结果写入到日志中。
then
echo $(date +%Y-%m-%d)" $db mysqldump sucess">>mysql.log
else
echo $(date +%Y-%m-%d)" $db mysql dump failed">>mysql.log
exit 0
fi
done
tar -czf $backupname.tar.gz *.sql #压缩所有sql文件
if [ "$?" == "0" ]
then
echo $(date +%Y-%m-%d)" tar sucess">>mysql.log
else
echo $(date +%Y-%m-%d)" tar failed">>mysql.log
exit 0
fi
rm -f *.sql #删除所有的sql文件
delname=mysql_$(date -d "$day day ago" +%Y-%m-%d).tar.gz #得到要删除的太旧的备份的名字。
rm -f $delname #删除文件。[/php]

2、赋予脚本权限并添加计划任务
[php][root@iZ94kalfrmmZ ~]# chmod +x mysqlbackup.sh //赋予脚本执行权限
[root@iZ94kalfrmmZ ~]# vi /etc/crontab //编辑计划任务[/php]

添加下面内容
[php]00 00 * * * root ~/mysqlbackup.sh //每天凌晨12点执行脚本备份数据库[/php]

至此,主机1上的配置完成

下面配置全部在主机2即备份主机上执行
一、先执行yum install rsync -y 安装服务

安装rsync服务前建议执行yum update -y全面更新系统,以免出现问题
[php][root@backup ~]# yum install rsync -y[/php]
等待安装完成
2、Ubuntu 执行apt-get安装
[php][root@backup ~]# sudo apt-get install rsync[/php]
等待安装完成

二、编辑rsync增量备份脚本
1、编辑rsync脚本并赋予权限,顺便提下,实际上rsync是可以通过配置文件来指定备份路径,但由于感觉已经是全自动,那么直接在脚本中定义备份路径也未尝不可。
[php][root@backup ~]# vi rsync_backup.sh[/php]

添加以下内容

#!/bin/bash
[php]rsync -avz --progress --delete root@ 192.168.100.101:/wwwroot/www/ /backup/www/[/php]

保存退出

[php][root@backup ~]# chmod +x ~/rsync_backup.sh //赋予执行权限[/php]

rsync中参数解析:
a:使用archive模式,等于-rlptgoD,即保持原有的文件权限
v:显示到屏幕中
z:表示传输时压缩数据
--progress :显示进度
--delete:精确保存副本,源主机删除的文件,目标主机也会同步删除

现在可以测试下rsync脚本
[php][root@backup ~]# ./rsync_backup.sh[/php]
首次执行会提示保存主机1的标识,输入yes并回车
上面提到已经利用ssh-keygen+ssh-copy-id免密码ssh登陆主机1,但这里首次可能会提示需要输入密码,输入这次以后将不会再提示,执行脚本会直接备份。
第一次从主机1备份数据过来,会整个文件夹都同步过来,所以时间会稍微长点,后面再次执行就会增量增加或者减少文件

2、添加计划任务实现自动日备份
[php][root@backup ~]# vi /etc/crontab //编辑计划任务[/php]
添加以下内容
[php]10 00 * * * root ~/rsync_backup.sh //每天凌晨12点10分执行rsync_backup脚本[/php]
保存退出
这里解析下,因为上面数据库脚本中提到,尽量把备份的数据库放到rsync备份的目录中,这样就可以把数据库一并备份下来
这里设定12点10分是保证在执行rsync备份前,数据库脚本已经执行完成,这里时间可能需要自行摸索更改,一般来说,个人博客的数据库都非常小,在2 3分钟内就可以备份完成

到这里,整个rsync每日增量备份就完成了。

2015-07-16
1,795 views
暂无评论

发表评论