红联Linux门户
Linux帮助

网站备份到百度云

发布时间:2016-07-18 10:06:19来源:cnblogs.com/chriscabin/作者:克里斯的小屋
引言
网站备份真的很重要,前段时间已经被坑过一次了,幸好数据没有完全丢,勉强恢复了,虽然丢失了几篇文章。之前一直是每隔几天手动备份一下重要的数据,然后下载到本地。但是有时候会忘记备份这件事,所以,自动进行备份就很有必要了。当然,要解决自动备份问题比较简单,些许脚本就能解决问题。问题是,总是把备份数据下载到本地,实在是比较麻烦(主要是浪费校园网流量!)。所以,本文就结合开源的bypy百度云客户端,实现每天凌晨自动备份数据后同步到百度网盘的功能!
 
准备工作
安装requests模块:bypy依赖这个模块:sudo pip install requests
安装bypy百度云客户端:sudo pip install bypy
配置客户端:
在终端中输入bypy info,根据提示打开链接,并将授权码paste回终端,然后回车;
使用bypy list测试查看网盘文件:实际的查看的是我的应用数据/bypy目录
root@localhost:~# bypy list Encoding for StdOut: ANSI_X3.4-1968 /apps/bypy ($t $f $s $m $d): D site-backup 0 2016-07-02, 02:51:14
 
脚本之旅
在编写自动备份脚本前,需要知道究竟哪些目录比较重要,值得上传。此外,还应当了解mysql数据库备份的方法。好在这些都比较简单!
我自己服务器上主要需要备份的目录有以下几个:
wordpress:这个是博客网站的文件夹,内容当然很重要,尤其是很多的媒体资源!
apache2:这个是apache2服务器配置目录,这个也很重要。
custom_scripts:这个目录是平时会更新的脚本合集,自然也应当定期备份咯。
shadowsocks:这个目录存放的是shadowsocks相关的配置文件以及监控脚本,其实不用每次都备份,不过不太大,所以顺带每天备份下好啦!
除了要备份的目录外,还有wordpress数据库需要备份,备份的命令非常简单:mysqldump -uroot -ppassword database_name > data.sql。
在备份完了后,只需要使用bypy将备份好的数据上传到百度云即可。
以下是为此编写的脚本,可以自动完成指定的备份和上传数据的任务:
#!/bin/bash
# Directories you want to backup
back_dirs="/root/custom_scripts /root/shadowsocks /var/www/wordpress /etc/apache2"
echo "========================================"
echo "Backup begin:" `date "+%Y-%m-%d %H:%M:%S"`
# Where to put the backup data.
dest_dir="/root/site-backup"
date_postfix=`date "+%Y%m%d"`
# Step A: create directory for backups
echo -n "Prepare to bakcup..."
if [ ! -d $dest_dir ]; then
/bin/mkdir -p $dest_dir
else
/bin/rm -r $dest_dir
/bin/mkdir -p $dest_dir
fi
echo "done!"
# Step B: stop website
echo -n "Stop web server apache..."
/etc/init.d/apache2 stop >/dev/null
echo "done!"
# Step C: backup each directories we've got
for dir in $back_dirs
do
name=${dir##*/}
echo -n "Backup directory: $dir, please wait..."
archive_name="$name-$date_postfix".tar.gz
/bin/tar -czpf $dest_dir/$archive_name $dir  2> /dev/null
echo "done!"
done
# Step D: backup database
echo -n "Backup database...."
/usr/bin/mysqldump -uuser -ppassword wordpress > $dest_dir/"wordpress_"$date_postfix.sql
echo "done!"
# Step E: restart website
echo -n "Start web server apache..."
/etc/init.d/apache2 start >/dev/null
echo "done!"
# Step F: upload backup data to Baidu Cloud
echo "Upload backup data to Baidu Cloud..."
remote_dir="site-backup/$date_postfix"
/usr/local/bin/bypy mkdir $remote_dir
/usr/local/bin/bypy upload $dest_dir $remote_dir
# Step G: clean backups.
echo -n "Clean backups..."
/bin/rm -r $dest_dir
echo "done!"
echo "Backup complete:" `date "+%Y-%m-%d %H:%M:%S"`
echo ""
exit 0
 
测试脚本
为了方便起见,首先给脚本赋予可执行权限,然后链接到/usr/local/bin/site-backup上,这样就可以在任何目录下启动备份命令了!
以下是测试执行的效果截图:
网站备份到百度云
以下是上传到百度云中的备份文件截图:
网站备份到百度云
 
定时备份
将任务添加到crontab即可(需要注意的是服务器与国内有12个小时的时差存在):
# at 4 a.m every day
0 16 * * * /usr/local/bin/site-backup >> /var/log/site-backup.log
 
尚待改进
由于当前网站备份出来的数据并非很大,所以采用了比较传统的完全备份再上传的方法;后期可以改进成每隔几天做一次完整备份,然后每天做增量备份的方式;
并不需要在百度网盘中保存太多的备份数据,后期需要增加新的功能,用于删除太旧的备份数据,只保留最近一周或者若干天的备份即可。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/22478.html