自动备份网站文件及数据库到dropbox

方法:

  1. 在dropbox官方创建一个新的应用「 Dropbox API App」,获得APP key和APP secret
  2. 在终端上下载并执行本文开头所引用的第三方资源

    curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh
    sudo $chmod +x dropbox_uploader.sh
    sudo $./dropbox_uploader.sh
    
  3. 按照屏幕提示输入APP key和APP secret,许可权限类型选择a,确认后在浏览器中打开终端给出的token链接,完成验证

  4. 测试上传文件,提示done则成功

    sudo ./dropbox_uploader.sh upload yourfile
    
  5. 编写备份bash脚本, sudo vi /root/backup.sh ,内容如下

      #!/bin/bash
    MYSQL_USER=xxxx                            #mysql用户名
    MYSQL_PASS=xxxxx                           #mysql密码
    WEB_DATA=/var/www                          #要备份的网站数据
    # 定义备份存放目录
    DROPBOX_DIR=/$(date +%Y-%m-%d) # Dropbox上的备份目录
    LOCAL_BAK_DIR=/home/yourid/backup # 本地备份文件存放目录
    #定义备份文件名字
    DBBakName=Data_$(date +"%Y%m%d").tar.gz
    WebBakName=Web_$(date +"%Y%m%d").tar.gz
    # 定义旧数据名称
    Old_DROPBOX_DIR=/$(date -d -30day +%Y-%m-%d)
    OldDBBakName=Data_$(date -d -30day +"%Y%m%d").tar.gz
    OldWebBakName=Web_$(date -d -30day +"%Y%m%d").tar.gz
    #删除本地30天前的旧数据
    rm -rf $LOCAL_BAK_DIR/$OldDBBakName $LOCAL_BAK_DIR/$OldWebBakName
    ./dropbox_uploader.sh delete $Old_DROPBOX_DIR/
    #导出mysql数据库
    mysqldump -u$MYSQL_USER -p$MYSQL_PASS --all-databases > $LOCAL_BAK_DIR/db.sql
    #压缩数据库
    tar zcvf $LOCAL_BAK_DIR/$DBBakName $LOCAL_BAK_DIR/db.sql
    rm -rf $LOCAL_BAK_DIR/db.sql
    #压缩网站数据
    tar zcvf $LOCAL_BAK_DIR/$WebBakName $WEB_DATA
    #开始上传
    cd ~
    ./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$DBBakName $DROPBOX_DIR/$DBBakName
    ./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$WebBakName $DROPBOX_DIR/$WebBakName
    echo -e "Backup Done!"
    
  6. 增加执行权限,sudo chmod +x /root/backup.sh
  7. 测试执行脚本, sudo ./backup.sh
  8. 设置cron定时任务,sudo crontab –e,并且在文件中增加45 4 1 * * /root/backup.sh #每月1日4点45分执行backup.sh文件
  9. 重启cron ,sudo service cron restart