VPS自动备份网站数据脚本 自动备份到FTP和Dropbox

数据是网站的命根子,必须妥善保管!勤做备份,做到有备无患。
借助liunx的任务计划crontab,我写了一个自动备份脚本让其在固定时间执行备份操作–打包网站数据备份到FTP空间和dropbox上。
备份到FTP需要系统有安装ftp,现在一般的VPS都默认安装,如发现没有此命令,可以使用如下尝试安装

yum install ftp #centos等redhat系的发行版
apt-get install ftp #debian系的发行版

上传到dropbox首先要建立一个dropbox APP,建立链接在此,如下图 注意不要选择business的app,也不需要full dropbox。
dropbox-1.jpg
dropbox-2.jpg
上传还需要用到一个第三方上传脚本Dropbox Uploader,使用如下命令把它下载到备份目录/home/backup并给予执行权限

curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh
chmod +x dropbox_uploader.sh

使用此脚本要先进行验证才能上传文件到dropbox,验证步骤如下

./dropbox_uploader.sh

1 输入上面的命令运行它,填入App keyApp secret
2 选择a
3 按y确认
4 复制生成的验证链接到浏览器访问
5 浏览器确认后终端按任意键验证完成

 ./dropbox_uploader.sh
 This is the first time you run this script.
 1) Open the following URL in your Browser, and log in using your account: https://www.dropbox.com/developers/apps
 2) Click on "Create App", then select "Dropbox API app"
 3) Now go on with the configuration, choosing the app permissions and access restrictions to your DropBox folder
 4) Enter the "App Name" that you prefer (e.g. MyUploader255431153919283)
 Now, click on the "Create App" button.
 When your new App is successfully created, please type the
 App Key, App Secret and the Permission type shown in the confirmation page:
 # App key: xxxxxxxxxxxx
 # App secret: xxxxxxxxxxxx
Permission type:
 App folder [a]: If you choose that the app only needs access to files it creates
 Full Dropbox [f]: If you choose that the app needs access to files already on Dropbox
 # Permission type [a/f]: a
 > App key is xxxxxxxxxxxx, App secret is xxxxxxxxxxxx and Access level is App Folder. Looks ok? [y/n]: y
 > Token request... OK
 Please open the following URL in your browser, and allow Dropbox Uploader
 to access your DropBox folder:
 --> https://www.dropbox.com/1/oauth/authorize?oauth_token=xxxxxxxxxxxx
Press enter when done...
 > Access Token request... OK
 Setup completed!

dropbox-3.png
dropbox-4.png

脚本命名为autobackup.sh 内容如下: 本文中autobackup.shdropbox_uploader.sh都放在备份目录,实际操作中请注意路径!

#!/bin/bash
#自定义区
Web_dir=/home/wwwroot                #网站文件夹
Bak_dir=/home/backup                #备份文件夹
Nginx_conf=/usr/local/nginx/conf                    #nginx配置文件夹
Cert_dir=/root/cert                    #证书文件夹
DB_user=root                    #数据库用户名
DB_pass=yourpassword                #数据库用户密码
FTP_IP=yourdomain.com                #FTP网址/IP
FTP_user=ftp                    #FTP用户名
FTP_pass=yourpassword                #FTP用户密码
FTP_dir=/home/backup                #FTP备份目录
#自定义区结束
#定义备份文件名
Web_data=Web_$(date +%Y-%m-%d).tar.gz
DB_data=DB_$(date +%Y-%m-%d).tar.gz
Nginx_data=Nginx_$(date +%Y-%m-%d).tar.gz
Cert_data=Cert_$(date +%Y-%m-%d).tar.gz
Dropbox_dir=/$(date +%Y-%m-%d)
#定义备份文件名结束
#定义旧备份文件名
Old_Web_data=Web_$(date -d -7day +%Y-%m-%d)            #本地和FTP网站数据备份和保留7天
Old_DB_data=DB_$(date -d -7day +%Y-%m-%d)            #本地和FTP数据库备份保留7天
Old_Nginx_data=Nginx_$(date -d -7day +%Y-%m-%d)        #本地和FTP Nginx配置备份保留7天
Old_Cert_data=Cert_$(date -d -7day +%Y-%m-%d)            #本地和FTP证书备份保留7天
Old_Dropbox_dir=/$(date -d -7day +%Y-%m-%d)            #远程dropbox备份保留7天
#定义旧备份文件名结束 保留天数根据自己需要修改
if [ ! -d "$Bak_dir" ]; then
 mkdir $Bak_dir
fi
cd $Bak_dir
#导出数据库备份分别压缩,最后再压缩为一个文件
for db in `mysql -u$DB_user -p$DB_pass -B -N -e 'SHOW DATABASES' | xargs`; do
    (mysqldump -u$DB_user -p$DB_pass ${db} | gzip -9 - > ${db}.sql.gz)
done
tar zcf $Bak_dir/$DB_data $Bak_dir/*.sql.gz
rm -rf $Bak_dir/*.sql.gz
#压缩nginx配置文件
cd $Nginx_conf
tar zcf $Bak_dir/$Nginx_data ./*
#压缩网站数据
cd $Web_dir
tar zcf $Bak_dir/$Web_data ./*
#压缩证书文件
cd $Cert_dir
tar zcf $Bak_dir/$Cert_data ./*
#上传到FTP
#我的FTP服务器不支持主动模式,所以加了 passive 参数以开启被动模式
#如你的FTP支持主动模式,请删除此行参数
ftp -v -n $FTP_IP << END
user $FTP_user $FTP_pass
type binary
passive
cd $FTP_dir
put $DB_data
put $Nginx_data
put $Web_data
put $Cert_data
delete $Old_Web_data
delete $Old_DB_data
delete $Old_Nginx_data
delete $Old_Cert_data
bye
END
cd $Bak_dir
#上传到dropbox
./dropbox_uploader.sh upload $Bak_dir/$Web_data $Dropbox_dir/$Web_data
./dropbox_uploader.sh upload $Bak_dir/$DB_data $Dropbox_dir/$DB_data
./dropbox_uploader.sh upload $Bak_dir/$Nginx_data $Dropbox_dir/$Nginx_data
./dropbox_uploader.sh upload $Bak_dir/$Cert_data $Dropbox_dir/$Cert_data
#删除旧数据
rm -rf $Bak_dir/$Old_Cert_data $Bak_dir/$Old_DB_data $Bak_dir/$Old_Nginx_data $Bak_dir/$Old_Web_data
./dropbox_uploader.sh delete $Old_Dropbox_dir/
echo -e "Done!"

将其加入任务计划 每天3点执行一次

crontab -e
0 3 * * * /home/backup/autobackup.sh

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据