VPS自动备份到Dropbox
本文所讲内容为如何将VPS上的文件以及数据库中的内容定时自动备份到Dropbox上。
1.创建Dropbox应用
首先,需要创建一个Dropbox应用,可以从该网址进行创建:https://www.dropbox.com/developers/apps/create。
在这里,应用类型选择Dropbox API App,数据存储类型选择Files and datastores,权限选择Yes(应用只需要访问它创建的文件)。然后命名创建。
2.下载并执行dropbox_uploader.sh
dropbox_uploader是一个第三方Dropbox备份脚本,我们可以从这里获取到:https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh。
然后,为该脚本添加执行权限:
# chmod +x dropbox_uploader.sh
执行该脚本:
# ./dropbox_uploader.sh
根据提示输入Dropbox应用中的App key和App secret,许可类型选择a,确认y,复制给出的权限验证链接到浏览器,确认后回到终端按任意键完成。
3.编写备份脚本
编写定时备份脚本,取名为backup.sh。其代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
#!/bin/bash # MYSQL数据库帐号密码 MYSQL_USR="root" # 数据库帐号 MYSQL_PWD="password" # 数据库密码 # 定义需要备份的目录 NGINX_CONF_DIR=/usr/local/nginx/conf # nginx配置目录 WEB_DIR=/home/wwwroot # 网站数据存放目录 # 定义备份存放目录 DROPBOX_DIR=/$(date +%Y-%m-%d) # Dropbox上的备份目录 LOCAL_BAK_DIR=/home/backup # 本地备份文件存放目录 # 定义备份文件名称 DBBakName=DB_$(date +%Y%m%d).tar.gz NginxConfBakName=NginxConf_$(date +%Y%m%d).tar.gz WebBakName=Web_$(date +%Y%m%d).tar.gz # 定义旧数据名称 Old_DROPBOX_DIR=/$(date -d -7day +%Y-%m-%d) OldDBBakName=DB_$(date -d -10day +%Y%m%d).tar.gz OldNginxConfBakName=NginxConf_$(date -d -10day +%Y%m%d).tar.gz OldWebBakName=Web_$(date -d -10day +%Y%m%d).tar.gz cd $LOCAL_BAK_DIR #使用命令导出SQL数据库,并且按数据库分个压缩 for db in `mysql -u$MYSQL_USR -p$MYSQL_PWD -B -N -e 'SHOW DATABASES' | xargs`; do (mysqldump -u$MYSQL_USR -p$MYSQL_PWD ${db} | gzip -9 - > ${db}.sql.gz) done #压缩数据库文件合并为一个压缩文件 tar zcf $LOCAL_BAK_DIR/$DBBakName $LOCAL_BAK_DIR/*.sql.gz rm -rf $LOCAL_BAK_DIR/*.sql.gz #压缩Nginx配置数据 cd $NGINX_CONF_DIR tar zcf $LOCAL_BAK_DIR/$NginxConfBakName ./* #压缩网站数据 cd $WEB_DIR tar zcf $LOCAL_BAK_DIR/$WebBakName ./* cd /root/bin #开始上传 ./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$DBBakName $DROPBOX_DIR/$DBBakName ./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$NginxConfBakName $DROPBOX_DIR/$NginxConfBakName ./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$WebBakName $DROPBOX_DIR/$WebBakName #删除旧数据 rm -rf $LOCAL_BAK_DIR/$OldDBBakName $LOCAL_BAK_DIR/$OldNginxConfBakName $LOCAL_BAK_DIR/$OldWebBakName ./dropbox_uploader.sh delete $Old_DROPBOX_DIR/ echo -e "Backup Done!" |
其中,用户可以根据自己的需求改编需要备份的目录,以及保留旧数据的时长(比如我这里设置的是Dropbox保留7天,本地保留10天)。
接下来,为这个备份脚本增加执行权限:
# chmod +x backup.sh
4.添加crontab
crontab –e,添加:
30 3 * * * /root/bin/backup.sh
这样,就可以每天凌晨3:30自动备份到Dropbox了。
5.Reference
本文部分内容参考自:http://timeting.com/27/use-scripts-auto-backup-vps-to-dropbox/
本文内容遵从CC3.0版权协议,转载请注明:转自Pythoner
本文链接地址:VPS自动备份到Dropbox
你的代码高亮很好看,这个是什么脚本额,或者说插件
Crayon Syntax Highlighter
这种备份方式我也写过一篇,最近开始学习tornado 希望能做个友链!已添加贵站
已添加
备份很赞,教程也很详细,已经成功实现!
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)
tar: Removing leading `/’ from member names
tar: /home/backup/*.sql.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
帐号密码是正确的 出现这样的错误
你可以试下127.0.0.1
你好,我想问一下你真的备份代码,怎么修改数据库的部分。
比如我不想备份所有的库,真想备份其中的一两个数据库,怎么修改?
谢谢
只需要修改mysqldump这段就可以了,现在的代码是所有的库,可以只dump具体的某个库,把{db}那里改成库名