脚本编程

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

博客前些时间分享过一次vps远程备份到七牛的工具,全傻瓜式交互操作,但也有一个很大的缺憾,那就是不够灵活,在无人干预的情况下,无法完成对多个站点的远程备份设置。 这次博客搬家到vps后,张戈花了点时间完善了下,实现了多站点,多数据库的本地七天循环备份和同步备份至七牛云存储的脚本。 一、类型说明 ①、七天循环备份 受服务器空间制约,我们不可能在VPS上每天都备份一份新的网站数据,一是没必要,二是占空间。我们折中一下,采用星期命名,每次备份将覆盖上星期同一天的文件。从而只备份7份数据,不至于占用特别大的空间。 如果,你的vps很小家子气或是网站数据太庞大,那还可以再折中一下,仅在星期二、四、六做备份,即总共三份数据。甚至还可以选一个星期的某一天做备份,即一周备份一次,也是可以的。 在空间允许的情况下,个人推荐做7天循环备份,在vps数据全部丢失的时候,能最大程度的容灾,恢复到丢失前一天,甚至是当天凌晨备份的所有数据,非常完美! ②、七牛远程备份 七牛远程备份就是将本地的7天备份的数据每天同步至七牛云存储私人空间,就算整台vps奔溃时,还能从容的恢复数据。相当于双保险,要知道七牛和你的vps同时宕机的几率是非常小的。 二、准备工作 ①、整理vps已有网站对应的数据库用户名和密码(如不清楚可直接用mysql的root帐号); ②、整理vps已有网站的根目录所在路径,比如 /home/wwwroot/zhang.ge ③、想好本地想要存放备份文件的路径,比如/home/wwwbackup ④、还没有七牛帐号的,点此注册一个,然后新建一个私人空间(为了数据安全,请勿使用公开空间,仅恢复数据时临时切换到公开状态即可),记录空间名以及帐号密钥: 三、本地七天备份 ①、登录VPS编写脚本 脚本代码如下: 使用说明: ②、将代码中的2处 mypassword 改成你自定义的压缩密码(确保数据安全),并保存为backup.sh之后,执行chmod +x backup.sh 赋执行权限。 为了避免复制转码问题,下文已打包分享 Ps:下载的代码包没有加密打包,请自行参考上述代码,自行加上【-P密码】参数。 ③、执行./backup.sh --help 可获得如下帮助说明: ④、备份数据库: 命令行示例如下: 命令参数说明: 参数1:db,设置备份类型为数据库 参数2:domain 网站域名,如zhang.ge,用于备份文件命名 参数3:dbname  要备份的数据库名次,如zhangge_db 参数4:mysqluser  mysql用户名,如不清楚可用mysql 的root帐号 参数5:mysqlpassword  mysql密码 参数6:back_path  备份文件存放路径 ⑤ 备份网站文件: 命令行示例: 命令参数说明: 参数1:file,设置备份类型为网站文件 参数2:domain 网站域名,如zgboke.com,同样用于备份文件的命名 参数3:site_path 网站文件的路径,如/home/wwwroot/zgboke.com 参数4:back_path 备份文件存放路径 Tips:为了方便后面的七牛同步,建议将备份文件存放到同一个上级目录,然后以网站域名来命名当前目录,比如,同一个vps的备份数据,我都放到/home/wwwbackup/,然后以各自的网站域名来命名,zhang.ge的数据库和文件我都统一存放到/home/wwwbackup/zhang.ge。 最新补充:2014/10/25日,手动执行命令检查时,发现报如下错误信息: Access denied for user 'dbuser'@'localhost' to database 'db' when using LOCK TABLES 即提示该用户不具备锁表权限,导致数据导出失败!这种情况一般发生在数据库正在执行某个查询动作,此时普通帐号是无法导出备份的! 解决办法: 方法①、修改上面的备份脚本,找到如下行 添加--skip-lock-tables参数即可,即不锁表导出(可能丢失某些正在更新的数据,当然凌晨时候几率很小)。 方法②、使用root帐号执行备份即可: 执行crontab -e 修改Linux计划任务,修改数据库备份计划命令行中的用户名为mysql的root帐号: 个人推荐方法②,最大限度的保证了数据备份的完整度! ⑥、建立七天备份的任务计划 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的任务计划,请参考添加: 每个网站2行,第一行备份数据库,第二行备份网站文件。 crontab参数格式为 {分 时...
阅读全文