Linux/vps使用LNMP备份脚本与七牛配合进行循环远程备份

  • A+
所属分类:CentOS

看过张戈博客的Linux/vps本地七天循环备份和七牛远程备份脚本文章及军哥的LNMP 1.2 备份工具使用教程文章后,也对自己的VPS进行了一次自动远程循环备份操作。

Linux/vps使用LNMP备份脚本与七牛配合进行循环远程备份

一、类型说明

①、循环备份

受服务器空间制约,我们不可能在VPS上每天都备份一份新的网站数据,一是没必要,二是占空间。LNMP备份脚本backup.sh只要执行一次,就可以生成以当天日期为结尾的文件,并删除上一次生成的文件,不至于占用特别大的空间。

如果,你的vps很小家子气或是网站数据太庞大,那还可以再折中一下,仅在星期二、四、六做备份,即总共三份数据。甚至还可以选一个星期的某一天做备份,即一周备份一次,也是可以的。

在空间允许的情况下,个人推荐做7天循环备份,在vps数据全部丢失的时候,能最大程度的容灾,恢复到丢失前一天,甚至是当天凌晨备份的所有数据,非常完美!

LNMP备份脚本backup.sh可以调整生成日期间隔的,而且也一定要注意。否则,每次生成文件后,不能删除上一次生成的文件,日积月累,服务器空间很快就会被备份文件填满。

②、七牛远程备份

七牛远程备份就是将本地的备份的数据同步至七牛云存储私人空间,就算整台vps奔溃时,还能从容的恢复数据。相当于双保险,要知道七牛和你的vps同时宕机的几率是非常小的。

二、准备工作

①、整理vps已有网站对应的数据库用户名和密码(如不清楚可直接用mysql的root帐号);

②、整理vps已有网站的根目录所在路径,比如 /home/wwwroot/xxx.net

③、想好本地想要存放备份文件的路径,比如/home/wwwbackup

④、还没有七牛帐号的,点此注册一个,然后新建一个私人空间(为了数据安全,请勿使用公开空间,仅恢复数据时临时切换到公开状态即可),记录空间名以及帐号密钥:
Linux/vps使用LNMP备份脚本与七牛配合进行循环远程备份
Linux/vps使用LNMP备份脚本与七牛配合进行循环远程备份

 

三、本地每七天备份

①、登录VPS编写脚本

军哥的LNMP安装包目录下有一个tools目录,放有常用的备份脚本 backup.sh,编辑次文件,可用VI 可下载后用EditPlus、Notepad等编辑器编辑,但千万不要用WIN的记事本来打开编辑。

脚本代码如下:

  1. #!/bin/bash
  2. #Funciont: Backup website and mysql database
  3. #Author: licess
  4. #Website: http://lnmp.org
  5. #IMPORTANT!!!Please Setting the following Values!
  6. Backup_Home="/home/wwwbackup/"  #####备份文件存放目录
  7. MySQL_Dump="/usr/local/mysql/bin/mysqldump"  ####mysqldump路径,如果是mariadb替换/usr/local/mysql为/usr/local/mariadb
  8. ######~Set Directory you want to backup~######
  9. Backup_Dir=("/home/wwwroot/www.xxx.com" "/home/wwwroot/www.xxx.com")
  10.                 ##########要备份的目录,目录用双引号括起来,多个目录空格隔开,如前面的例子
  11. ######~Set MySQL Database you want to backup~######
  12. Backup_Database=("xxx1" "xxx2" "xxx3")
  13.   ########要备份的数据库,前面有例子
  14. ######~Set MySQL UserName and password~######
  15. MYSQL_UserName='root'    ####不用说了,MySQL root账号
  16. MYSQL_PassWord='yourrootpassword'  ##### MySQL root密码
  17. ######~Enable Ftp Backup~######
  18. Enable_FTP=1   #####是否启用ftp备份,0 启用,非0 不启用
  19. # 0: enable; 1: disable
  20. ######~Set FTP Information~######  ###### ftp账号信息
  21. FTP_Host='1.2.3.4'
  22. FTP_Username='vpser.net'
  23. FTP_Password='yourftppassword'
  24. FTP_Dir="backup"   #########ftp服务器上存放备份的目录
  25. #Values Setting END!
  26. TodayWWWBackup=www-*-$(date +"%Y%m%d").tar.gz
  27. TodayDBBackup=db-*-$(date +"%Y%m%d").sql.tar.gz
  28. OldWWWBackup=www-*-$(date -d -7day +"%Y%m%d").tar.gz
  29. OldDBBackup=db-*-$(date -d -7day +"%Y%m%d").sql.tar.gz   #########注意此处的两个7day,意思是删除7天前的备份文件,如果在crontab中设置备份是3天一次,此次就要改成3DAY.
  30. Backup_Dir()
  31. {
  32.     Backup_Path=$1
  33.     Dir_Name=echo ${Backup_Path##*/}
  34.     Pre_Dir=echo ${Backup_Path}|sed 's/'${Dir_Name}'//g'
  35.     tar zcf ${Backup_Home}www-${Dir_Name}-$(date +"%Y%m%d").tar.gz -C ${Pre_Dir} ${Dir_Name}
  36. }
  37. Backup_Sql()
  38. {
  39.     ${MySQL_Dump} -u$MYSQL_UserName -p$MYSQL_PassWord $1 > ${Backup_Home}db-$1-$(date +"%Y%m%d").sql
  40.     tar zpcf ${Backup_Home}db-$1-$(date +"%Y%m%d").sql.tar.gz ${Backup_Home}db-$1-$(date +"%Y%m%d").sql --remove-files
  41. }
  42. if [ ! -f ${MySQL_Dump} ]; then
  43.     echo "mysqldump command not found.please check your setting."
  44.     exit 1
  45. fi
  46. if [ ! -d ${Backup_Home} ]; then
  47.     mkdir -p ${Backup_Home}
  48. fi
  49. type lftp >/dev/null 2>&1 || { echo >&2 "lftp command not found. Install: centos:yum install lftp,debian/ubuntu:apt-get install lftp."; }
  50. echo "Backup website files..."
  51. for dd in ${Backup_Dir[@]};do
  52.     Backup_Dir ${dd}
  53. done
  54. echo "Backup Databases..."
  55. for db in ${Backup_Database[@]};do
  56.     Backup_Sql ${db}
  57. done
  58. echo "Delete old backup files..."
  59. rm -f ${Backup_Home}${OldWWWBackup}
  60. rm -f ${Backup_Home}${OldDBBackup}
  61. if [ ${Enable_FTP} = 0 ]; then
  62.     echo "Uploading backup files to ftp..."
  63.     cd ${Backup_Home}
  64.     lftp ${FTP_Host} -u ${FTP_Username},${FTP_Password} << EOF
  65. cd ${FTP_Dir}
  66. mrm ${OldWWWBackup}
  67. mrm ${OldDBBackup}
  68. mput ${TodayWWWBackup}
  69. mput ${TodayDBBackup}
  70. bye
  71. EOF
  72. echo "complete."
  73. fi

使用说明:

②、将代码中的备份目录,数据库名,库密码等改成你自己的后,保存backup.sh之后,执行chmod +x backup.sh 赋执行权限。

③、建立七天备份的任务计划

I. 先执行crontab -l 看看命令是否存在,若不存在,请使用  yum -y install vixie-cron crontabs 安装crond

II. 确认crond已存在后,请执行/etc/init.d/crond start 确保启动了crond服务,并执行chkconfig crond on设置为开机启动。

III. 执行crontab -e 建立任务计划,如下是我的vps的任务计划,请参考添加:

  1. [root@MyServer~]# crontab -e
  2. 0 3 * * 1 /home/backup_lnmp.sh

crontab参数格式为 {分 时 日 月 周 + 命令行}

所以,拿第2行来说,就是 每周一的凌晨3点,执行后面的命令行。

注意事项:脚本需要写绝对路径,比如/root/scripts/backup.sh 并且要有执行权限,可以再次执行chmod +x 来赋权

作完以上步骤之后,你的VPS已经实现了本地每七天循环备份一次的机制。下面说下同步至七牛的方法。

四、七牛远程备份

 

下面qrsync部份内容作废!

因为七牛qrsync不再维护(但还是能够使用!),推荐大家使用 qshell 工具。

qshell 工具下载及说明页:https://github.com/qiniu/qshell

我们使用它的qupload参数功能,说明在:https://github.com/qiniu/qshell/wiki/qupload
使用情况基本和qrsync相同,在SSH中运行如下:

/boot/bak/qshell qupload 2 upload.conf

参数说明:
0、 \root\bak\ 程序所在目录。可任意
1、 qshell 主运行文件名。如果运行时报错,请执行chmod +x 来赋权。可改名
2、 qupload 主参数,意思是同步数据到七牛空间,带同步进度信息和数据上传完整性检查。不能改名
3、 2 并发上传的协程数量。可根据VPS的带宽确定,参数范围:1-2000
4、 upload.conf 数据同步的配置文件,该配置文件里面包含了一些诸如目标空间名称,AccessKey,SecretKey等信息,详情参考配置文件的讲解。可改名

upload.conf最简单配制:
{
"src_dir" : "/home/wwwbackup",
"access_key" : "七牛账号对应的AccessKey",
"secret_key" : "七牛账号对应的SecretKey",
"bucket" : "同步数据的目标空间名称,可以为公开空间或私有空间",
"ignore_dir" : true,
"overwrite" : true,
"log_file" : "upload.log",
"rescan_local" : true,
"log_level" : "info"
}

说明下:

src_dir、要同步的目录,同步目标下所有文件

ignore_dir、保存文件在七牛空间时,使用的文件名是否忽略本地路径,true忽略本地路径,不忽略就变成/home/wwwbackup/file1.tar.gz  这种形式了。

overwrite、是否覆盖空间中已有的同名文件,true覆盖。

log_file、LOG文件,此参数可删除

rescan_local、默认情况下,本地新增的文件不会被同步,设置为true才会去检测新增文件。此参数很重要,不设置就只同步了第一次,以后都不扫描目录,也就不会同步文件了。

执行crontab -e 添加如下计划任务:

0 4 * * 1 /boot/bak/qshell qupload 2 upload.conf

每周一的凌晨4点,执行同步命令。

远程备份至七牛的原理,是使用qrsync,它是一个根据七牛云存储API实现的简易命令行辅助上传同步工具,支持断点续上传,增量同步,它可将用户本地的某目录的文件同步到七牛云存储中,同步或上传几百GB甚至上TB的文件毫无鸭梨。

下面说具体做法:

①、下载七牛同步工具包:

  1. Linux 64bits :http://devtools.qiniu.com/qrsync-linux_amd64-current
  2. Linux 32bits :http://devtools.qiniu.com/qrsync-linux_386-current
  3. Linux ARMv6 :http://devtools.qiniu.com/qrsync-linux_arm-current
  4. ######例如:
  5. wget http://devtools.qiniu.com/qrsync-linux_amd64-current

下载好后,重命名为qrsync,使用vi或者电脑中用EditPlus、Notepad建立一个qrsync.conf通用配置模版文件,

文件内容为:

  1. {
  2.     "src":          "/home/wwwbackup/",
  3.     "dest":         "qiniu:
  4.                         access_key=<AccessKey>
  5.                         &secret_key=<SecretKey>
  6.                         &bucket=<Bucket>
  7.                         &key_prefix=<KeyPrefix>
  8.                         &threshold=512000",
  9.     "deletable":    0,
  10.     "debug_level":  1
  11. }

简单说明:

①、src表示需要同步的本地目录,比如网站文件打包存放路径:/www/web_backup,或是你网站文件路径:/home/domain/public_html,必填

②、2个Key:access_key和secret_key,进入七牛账号设置界面可以获取到。必填

③、bucket表示存放备份文件的七牛空间,建议新建一个。必填

④、key_prefix 表示存放在七牛空间的上一级目录名称,比如key_prefix=backup/ 则表示备份文件将存放到目标空间下的backup文件夹中。参数留空则表示存放到改空间的根目录。可留空或者删除此参数

⑤、threshold表示文件分块上传的块大小,单位为字节(Byte),可根据你本地的网络带宽来确定。

⑥、deletable 是否同步删除七牛云上的文件,通常设置0,当本地文件删除时并不删除存储在七牛的对应文件。如果你想删除本地文件的同时也删除存储在存储在七牛的文件,则设置为1。

⑦、日志输出等级,取值0和1。通常设置1,只输出必要的日志。当上传过程发生问题时,设置0可以得到详细日志。必填

注意此文件中的是个逗号。

Ps:以上即为此工具必备的参数,更多参数请至七牛官方文档查看。

改完后,执行crontab -e 添加如下计划任务:

  1. [root@MyServer294 ~]# crontab -e
  2. 0 4 * * 1 /home/qrsync /home/qrsync.conf

Ps:代码表示每天凌晨4点同步至七牛,记得要修改qrsync和qrsync.conf的实际路径。

完成以上所有步骤之后,你的vps就实现了本地七天循环备份和七牛远程备份了!

五、附加说明

①、注意事项

I. 考虑到脚本适用性,压缩时会包含文件的绝对路径,而解压时也将恢复原来的绝对路径。

比如,解压zhangge.net_7.zip,所有文件将带上备份前的路径:/home/wwwroot/xxx.net/

II. 备份文件会带有脚本执行者的权限,比如备份脚本是以root身份执行,那么这个压缩包解压后的文件的所有者和权限都是root,那么在恢复网站数 据时,必须使用chmod恢复权限到当前的web使用者,比如lnmp一件安装的环境,web的使用者是www,那么解压缩备份文件后,记得执行:chown -R www:www /网站路径  恢复所有者权限,否则打开网站可能出现空白页!

和本地数据保持一致,七牛同步工具还有一个优点,通过哈希值判断文件是否有更新,而不重复同步相同文件,所以每天的七牛同步其实只会同步当天生成的备份包

发表评论

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen: