通过python的百度云客户端可以把linux数据备份到百度云

引言

网站备份真的很重要,前段时间已经被坑过一次了,幸好数据没有完全丢,勉强恢复了,虽然丢失了几篇文章。之前一直是每隔几天手动备份一下重要的数据,然后下载到本地。但是有时候会忘记备份这件事,所以,自动进行备份就很有必要了。当然,要解决自动备份问题比较简单,些许脚本就能解决问题。问题是,总是把备份数据下载到本地,实在是比较麻烦(主要是浪费校园网流量!)。所以,本文就结合开源的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将备份好的数据上传到百度云即可。
  • 以下是为此编写的脚本,可以自动完成指定的备份和上传数据的任务:
 
 
  1. #!/bin/bash
  2. # Directories you want to backup
  3. back_dirs="/root/custom_scripts /root/shadowsocks /var/www/wordpress /etc/apache2"
  4. echo "========================================================================"
  5. echo "Backup begin:" `date "+%Y-%m-%d %H:%M:%S"`
  6. # Where to put the backup data.
  7. dest_dir="/root/site-backup"
  8. date_postfix=`date "+%Y%m%d"`
  9. # Step A: create directory for backups
  10. echo -n "Prepare to bakcup..."
  11. if [ ! -d $dest_dir ]; then
  12. /bin/mkdir -p $dest_dir
  13. else
  14. /bin/rm -r $dest_dir
  15. /bin/mkdir -p $dest_dir
  16. fi
  17. echo "done!"
  18. # Step B: stop website
  19. echo -n "Stop web server apache..."
  20. /etc/init.d/apache2 stop >/dev/null
  21. echo "done!"
  22. # Step C: backup each directories we've got
  23. for dir in $back_dirs
  24. do
  25. name=${dir##*/}
  26. echo -n "Backup directory: $dir, please wait..."
  27. archive_name="$name-$date_postfix".tar.gz
  28. /bin/tar -czpf $dest_dir/$archive_name $dir 2> /dev/null
  29. echo "done!"
  30. done
  31. # Step D: backup database
  32. echo -n "Backup database...."
  33. /usr/bin/mysqldump -uuser -ppassword wordpress > $dest_dir/"wordpress_"$date_postfix.sql
  34. echo "done!"
  35. # Step E: restart website
  36. echo -n "Start web server apache..."
  37. /etc/init.d/apache2 start >/dev/null
  38. echo "done!"
  39. # Step F: upload backup data to Baidu Cloud
  40. echo "Upload backup data to Baidu Cloud..."
  41. remote_dir="site-backup/$date_postfix"
  42. /usr/local/bin/bypy mkdir $remote_dir
  43. /usr/local/bin/bypy upload $dest_dir $remote_dir
  44. # Step G: clean backups.
  45. echo -n "Clean backups..."
  46. /bin/rm -r $dest_dir
  47. echo "done!"
  48. echo "Backup complete:" `date "+%Y-%m-%d %H:%M:%S"`
  49. echo ""
  50. exit 0

测试脚本

  • 为了方便起见,首先给脚本赋予可执行权限,然后链接到/usr/local/bin/site-backup上,这样就可以在任何目录下启动备份命令了!
  • 以下是测试执行的效果截图:
  • 以下是上传到百度云中的备份文件截图:

定时备份

  • 将任务添加到crontab即可(需要注意的是服务器与国内有12个小时的时差存在):
 
 
  1. # at 4.a.m every day
  2. 0 16 * * * /usr/local/bin/site-backup >> /var/log/site-backup.log

尚待改进

  • 由于当前网站备份出来的数据并非很大,所以采用了比较传统的完全备份再上传的方法;后期可以改进成每隔几天做一次完整备份,然后每天做增量备份的方式;
  • 并不需要在百度网盘中保存太多的备份数据,后期需要增加新的功能,用于删除太旧的备份数据,只保留最近一周或者若干天的备份即可。

参考



http://blog.chriscabin.com/others/wordpress/1194.html
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值