受服务器空间制约,我们不可能在VPS上每天都备份一份新的网站数据,一是没必要,二是占空间。我们折中一下,采用星期命名,每次备份将覆盖上星期同一天的文件。从而只备份7份数据,不至于占用特别大的空间。

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

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

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

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

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

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

④、还没有七牛帐号的,点此注册一个,然后新建一个私人空间(为了数据安全,请勿使用公开空间,仅恢复数据时临时切换到公开状态即可),记录空间名以及帐号密钥:

Linux/vps本地七天循环备份和七牛远程备份脚本

Linux/vps本地七天循环备份和七牛远程备份脚本
三、本地七天备份
①、登录VPS编写脚本

脚本代码如下:
点击展开代码

使用说明:
②、将代码中的2处 mypassword 改成你自定义的压缩密码(确保数据安全),并保存为backup.sh之后,执行chmod +x backup.sh 赋执行权限。

为了避免复制转码问题,下文已打包分享[点此直达]

Ps:下载的代码包没有加密打包,请自行参考上述代码,自行加上【-P密码】参数。
③、执行./backup.sh --help 可获得如下帮助说明:

Linux/vps本地七天循环备份和七牛远程备份脚本
④、备份数据库:

命令行示例如下:
Shell
./backup.sh db zhangge.net zhangge_db zhangge 123456 /home/wwwbackup/bandwagonhost.biz
1
    
./backup.sh db zhangge.net zhangge_db zhangge 123456 /home/wwwbackup/bandwagonhost.biz

命令参数说明:

参数1:db,设置备份类型为数据库

参数2:domain 网站域名,如zhangge.net,用于备份文件命名

参数3:dbname  要备份的数据库名次,如zhangge_db

参数4:mysqluser  mysql用户名,如不清楚可用mysql 的root帐号

参数5:mysqlpassword  mysql密码

参数6:back_path  备份文件存放路径

⑤ 备份网站文件:

命令行示例:
Shell
./backup.sh file zgboke.com /home/wwwroot/zgboke.com /home/wwwbackup/bandwagonhost.biz
1
    
./backup.sh file zgboke.com /home/wwwroot/zgboke.com /home/wwwbackup/bandwagonhost.biz

命令参数说明:

参数1:file,设置备份类型为网站文件

参数2:domain 网站域名,如zgboke.com,同样用于备份文件的命名

参数3:site_path 网站文件的路径,如/home/wwwroot/bandwagonhost.biz

参数4:back_path 备份文件存放路径

Tips:为了方便后面的七牛同步,建议将备份文件存放到同一个上级目录,然后以网站域名来命名当前目录,比如,同一个vps的备份数据,我都放到/home/wwwbackup/,然后以各自的网站域名来命名,zhangge.net的数据库和文件我都统一存放到/home/wwwbackup/zhangge.net。

最新补充:2014/10/25日,手动执行命令检查时,发现报如下错误信息:

Access denied for user 'dbuser'@'localhost' to database 'db' when using LOCK TABLES

即提示该用户不具备锁表权限,导致数据导出失败!这种情况一般发生在数据库正在执行某个查询动作,此时普通帐号是无法导出备份的!

解决办法:

方法①、修改上面的备份脚本,找到如下行
    Shell
    mysqldump -u$mysqluser -p$mysqlpd $dbname>$back_path/$domain\_db_$TODAY\.sql
    1
        
    mysqldump -u$mysqluser -p$mysqlpd $dbname>$back_path/$domain\_db_$TODAY\.sql

添加--skip-lock-tables参数即可,即不锁表导出(可能丢失某些正在更新的数据,当然凌晨时候几率很小)。
    Shell
    mysqldump -u$mysqluser -p$mysqlpd $dbname --skip-lock-tables>$back_path/$domain\_db_$TODAY\.sql
    1
        
    mysqldump -u$mysqluser -p$mysqlpd $dbname --skip-lock-tables>$back_path/$domain\_db_$TODAY\.sql

方法②、使用root帐号执行备份即可:

执行crontab -e 修改Linux计划任务,修改数据库备份计划命令行中的用户名为mysql的root帐号:
    Shell
    ./backup.sh db zhangge.net zhangge_db root rootpasswd /home/wwwbackup/zhangge.net
    1
        
    ./backup.sh db zhangge.net zhangge_db root rootpasswd /home/wwwbackup/zhangge.net

个人推荐方法②,最大限度的保证了数据备份的完整度!

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

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的任务计划,请参考添加:
#backup zgboke.com:
0 3 * * * /root/scripts/backup.sh db zgboke.com zgboke zgboke 123456 /home/wwwbackup/zgboke.com >/dev/null 2>&1
5 3 * * * /root/scripts/backup.sh file zgboke.com /home/wwwroot/zgboke.com /home/wwwbackup/zgboke.com >/dev/null 2>&1
#backup zhangge.net:
10 3 * * * /root/scripts/backup.sh db zhangge.net zhangge zhangge 123456 /home/wwwbackup/zhangge.net >/dev/null 2>&1
15 3 * * * /root/scripts/backup.sh file zhangge.net /home/wwwroot/zhangge.net /home/wwwbackup/zhangge.net >/dev/null 2>&1
1
2
3
4
5
6
    
#backup zgboke.com:
0 3 * * * /root/scripts/backup.sh db zgboke.com zgboke zgboke 123456 /home/wwwbackup/zgboke.com >/dev/null 2>&1
5 3 * * * /root/scripts/backup.sh file zgboke.com /home/wwwroot/zgboke.com /home/wwwbackup/zgboke.com >/dev/null 2>&1
#backup zhangge.net:
10 3 * * * /root/scripts/backup.sh db zhangge.net zhangge zhangge 123456 /home/wwwbackup/zhangge.net >/dev/null 2>&1
15 3 * * * /root/scripts/backup.sh file zhangge.net /home/wwwroot/zhangge.net /home/wwwbackup/zhangge.net >/dev/null 2>&1

每个网站2行,第一行备份数据库,第二行备份网站文件。

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

所以,拿第2行来说,就是 每天的凌晨3点,执行后面的命令行,最后的>/dev/null 2>&1 表示屏蔽任何日志信息。

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

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

远程备份至七牛的原理,在之前的博文已经说明,不清楚的请参考:https://zhangge.net/4221.html

下面说具体做法:
①、下载我整理好的七牛同步工具包(仅提供64位):

Shell
wget http://static.zhangge.net/diy_tools/QN_Backup_tools.zip
1
    
wget http://static.zhangge.net/diy_tools/QN_Backup_tools.zip

备用下载:
下载地址
②、将工具包解压:

unzip QN_Backup_tools.zip

解压完成后,会得到一个tools文件夹,里面有三个文件,分别为:

qrsync:七牛同步工具 (仅适合Linux64位,其他版本请点此下载相应版本替换此文件)

qrsync.conf :通用配置模版

config.sh:配置初始化辅助脚本

③、配置qrsync和计划任务
I. 会用vim 和crontab -e 的童鞋 可以无视config.sh,直接使用vim编辑qrsync.conf:

{"src":"/home/wwwbackup","dest":"qiniu:access_key=Your AK&secret_key=Your SK&bucket=bucket_name&threshold=512000","deletable":0,"debug_level":1}
1
    
{"src":"/home/wwwbackup","dest":"qiniu:access_key=Your AK&secret_key=Your SK&bucket=bucket_name&threshold=512000","deletable":0,"debug_level":1}

修改代码中的 /home/wwwbackup 、Your AK 、Your SK、bucket_name三个参数即可。

/home/wwwbackup 表示要同步到七牛的目录,即上文七天备份的文件存放路径

Your AK:你的七牛帐号Access_key

your SK:你的七牛帐号的Secret_key

bucket_name:准备存放备份文件的七牛私人空间名字

改完后,执行crontab -e 添加如下计划任务:
#Add by QN_backup Scripts
0 4 * * * /root/tools/qrsync /root/tools/qrsync.conf >/dev/null 2>&1 &
1
2
    
#Add by QN_backup Scripts
0 4 * * * /root/tools/qrsync /root/tools/qrsync.conf >/dev/null 2>&1 &

Ps:代码表示每天凌晨4点同步至七牛,记得要修改qrsync和qrsync.conf的实际路径。
II. 不熟悉vim和crontab的同学,可如下执行我写好的初始化脚本:config.sh

Shell
[root@Mars_Server tools]# sh config.sh
Please input the access_key:   输入七牛access_key密钥
Please input the secret_key:   输入七牛secret_key密钥
Please input the bucket name:  输入七牛私人空间名称
Please input the backup path:  输入本地七天循环备份存放路径,比如/home/wwwbackup
#回车后将开始初始化配置,出现如下类似信息则成功:
echo =========================The crontab list===============================
...
...
#Add by QN_backup Scripts
0 4 * * * /root/tools/qrsync /root/tools/qrsync.conf >/dev/null 2>&1 &
echo =========================The crontab list===============================
configure Success!
1
2
3
4
5
6
7
8
9
10
11
12
13
    
[root@Mars_Server tools]# sh config.sh
Please input the access_key:   输入七牛access_key密钥
Please input the secret_key:   输入七牛secret_key密钥
Please input the bucket name:  输入七牛私人空间名称
Please input the backup path:  输入本地七天循环备份存放路径,比如/home/wwwbackup
#回车后将开始初始化配置,出现如下类似信息则成功:
echo =========================The crontab list===============================
...
...
#Add by QN_backup Scripts
0 4 * * * /root/tools/qrsync /root/tools/qrsync.conf >/dev/null 2>&1 &
echo =========================The crontab list===============================
configure Success!

完成以上所有步骤之后,你的vps就实现了本地七天循环备份和七牛远程备份了!
五、附加说明
①、注意事项

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

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

看得懂脚本、又不想带路径压缩的同学,可以自行修改下,让脚本只压缩网站目录。

比如,将脚本第29行修改如下即可实现:
Shell
cd $site_path && cd ..
zip --version >/dev/null && zip -9r $back_path/$domain\_$TODAY\.zip $domain
1
2
    
cd $site_path && cd ..
zip --version >/dev/null && zip -9r $back_path/$domain\_$TODAY\.zip $domain

注意网站目录名必须和输入的domain一致!看不懂脚本的,不建议修改,带了绝对路径也不影响后期手动恢复!

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

Linux/vps本地七天循环备份和七牛远程备份脚本
③、本地备份截图:

Linux/vps本地七天循环备份和七牛远程备份脚本

Ps:文件中的数据表示星期几,带db的表示数据库,没带的表示网站文件,每个网站最终将有14份文件(7个数据库备份,7个网站文件备份)。
④、七牛备份截图:

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

本文到此就要告一段落了,仔细想想可以发现,还是存在一定的改善空间。

比如,还可以加上网站恢复机制。同步一些帐号等配置数据到七牛,当vps完全奔溃,数据无法找回时,可直接通过脚本等工具从七牛下载数据,然后按照写好的配置数据,自动将数据恢复到指定日期。完全无需过多的人工干预。想想都觉得很强大,是不?

如果有一套全自动恢复机制,不但可以在vps完全奔溃时快速恢复,还可以用于全自动网站搬家,有没有感觉像最近推出的的多备份服务?

其实,要实现也非常简单,多写一个脚本就可以实现,只是考虑到实用性、环境兼容性等因素,暂时就不花精力去实现了。

利用七牛存储7天远程自动备份LINUX服务器的更多相关文章

  1. 打造百度网盘备份利器:自动备份Linux VPS文件和多线程下载百度网盘资源

    前一段时间国内的各大网盘百度云盘,金山快盘,360云盘,华为网盘为争夺用户上演空间容量博弈,网盘商们还固执地以为中国的网民都不懂网络技术,可以像某公司那样用一些数字的手段来忽悠用户,参与到网盘商的数字 ...

  2. JMC监控(Windows上远程连接监控Linux服务器的JVM)

    Windows上远程连接监控Linux服务器的JVM:1.Linux服务器上配置:在Tomcat的tomcat-wms/bin/catalina.sh中添加CATALINA_OPTS="-X ...

  3. nodejs+phantomjs+七牛 实现截屏操作并上传七牛存储

    近来研究了下phantomjs,只是初涉,还谈不上深入研究,首先介绍下什么是phantomjs. 官网上的介绍是:”PhantomJS is a headless WebKit scriptable ...

  4. 使用七牛云存储实现Android的自动更新

    为了修复Bug或更新软件,我们通常需要实现自动更新,没有哪一个牛逼的人能够搞到每一个用户的机子去帮他们更新. 1.自动更新的流程 我们将了解一下自动更新的思路.既然软件要自动更新,那么它必须知道自己是 ...

  5. 百度文本编辑器 Ueditor for net 使用七牛存储附件的实现

    百度编辑器功能强大,确实好用,可惜附件使用本地存储,如果网站的用户量巨大,则会使得网站目录变得非常庞大,而且文件不易于管理,七牛云存储在附件存储方面下了不少功夫,用起来感觉不错,要是将ueditor ...

  6. 七牛存储qshell工具

    ---恢复内容开始--- 工具地址:https://developer.qiniu.com/kodo/tools/1302/qshell 下载完成后:根据自己的系统选择需要的可执行文件,支持linux ...

  7. Linux 下通过脚本实现远程自动备份

    考虑到在本机上备份数据,一旦该机器硬盘出现故障,数据无法取出.远程手动备份数据费时费力且不及时.最好的方法就是通过脚本实现远程自动互备.但远程无论是通过SSH登陆,还是通过scp拷贝文件都需要输入密码 ...

  8. 使用ssh公钥密钥自动登陆linux服务器

    转自:http://7056824.blog.51cto.com/69854/403669 作为一名 linux 管理员,在多台 Linux 服务器上登陆进行远程操作是每天工作的一部分.但随着服务器的 ...

  9. [zz] 使用ssh公钥密钥自动登陆linux服务器

    目录 .生成密匙对 .拷贝公匙到远程机 .启动登陆代理 这种方法处理后每次需要运行命令:ssh-add ~/.ssh/id_dsa 作为一名 linux 管理员,在多台 Linux 服务器上登陆进行远 ...

随机推荐

  1. jquery 获取表单的用户输入值的方法

    以前的表单中的select input textarea的用户选择输入是通过jQuery的val()方法获取到的,在三一Java前端大拿教我了一个方法可以不用那么麻烦获取数据,只要在这些表单元素上加n ...

  2. async.series

    [async.series] series适用于顺序执行异步且前后无关联的调用.对于顺序执行异步且前后有叛逆的调用,则需要使用waterfall. If any functions in the se ...

  3. C#实现将字符串作为表达式运算

    转载:http://blog.csdn.net/lifeforcode/article/details/2010807 曾经有个需求,要把一段字符串作为C#的一段语句来执行.说实在了,就类似实现计算器 ...

  4. java定义object数组(可以存储String或int等多种类型)

    需求| 想在数组中既有String类型又有int等类型,所以需要定义数组为Object类型   背景| 现在有一个字符串params,需要对其进行逗号分隔赋值到数组里,这时遇到了个问题,即使直接定义的 ...

  5. 【Django】关于使用阿里的iconfont

    刚刚从看到课程里老师使用了阿里提供的矢量图标iconfont.cn 我记录一下基本步骤: 1.登录iconfont.cn,搜索图标 2.选中想要的icon点击添加入库,再从右上方点购物车,把icon添 ...

  6. LeetCode解题思路

    刷完题后,看一下其他人的solution,受益匪浅. 可以按不同的topic刷题,比如数组.字符串.集合.链表等等.先做十道数组的题,接着再做十道链表的题. 刷题,最主要的是,学习思路. 多刷几遍.挑 ...

  7. VHS介绍

    Java.JS HTTP流传输(VHS)介绍“我怎么才能让我的视频和Video.js一起玩?”“ 这是我们在使用Vio.js时最常见的问题之一.这是个好问题. 如果有人检查了Vo.js的拷贝,他们的内 ...

  8. Mac IntelliJ IDEA 2017(java开发集成环境)附注册码和破解教程 v2017.3.5破解版

    原文:http://www.orsoon.com/Mac/155938.html 原文中含有软件下载地址 软件介绍 IntelliJ IDEA 2017 Mac激活版是Mac平台上的一款java开发集 ...

  9. Python+Selenium学习--窗口切换及操作元素

    场景 有时候我们在测试一个web 应用时会出现多个浏览器窗口的情况,在selenium1.0 中这个问题比较难处理.webdriver 提供了相关相方法可以很轻松的在多个窗口之间切换并操作不同窗口上的 ...

  10. c中堆栈的理解

    一直对堆栈的使用以及全局变量.静态全局变量.局部变量.静态局部变量.初始化的全局变量.未初始化的全局变量.初始化的局部变量.未初始化的局部变量理解的不是很清楚,今天抽个时间来总结以下这方面的知识: 1 ...