服务器数据备份到阿里云盘

忘忧 2023年02月11日 153次浏览

aliyunpan安装

阿里云盘CLI。仿 Linux shell 文件处理命令的阿里云盘命令行客户端,支持JavaScript插件,支持webdav文件协议,支持同步备份功能。
https://github.com/tickstep/aliyunpan

Centos安装

sudo curl -fsSL http://file.tickstep.com/rpm/aliyunpan/aliyunpan.repo | sudo tee /etc/yum.repos.d/tickstep-aliyunpan.repo > /dev/null && sudo yum install aliyunpan -y

image-1676096008729

Ubuntu安装

sudo curl -fsSL http://file.tickstep.com/apt/pgp | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/tickstep-packages-archive-keyring.gpg > /dev/null && echo "deb [signed-by=/etc/apt/trusted.gpg.d/tickstep-packages-archive-keyring.gpg arch=amd64,arm64] http://file.tickstep.com/apt aliyunpan main" | sudo tee /etc/apt/sources.list.d/tickstep-aliyunpan.list > /dev/null && sudo apt-get update && sudo apt-get install -y aliyunpan

准备工作

创建文件备份目录

mkdir -p /wordpress/backup

开启aliyunpan 命令debug模式

export ALIYUNPAN_VERBOSE=1

登录aliyunpan

如何获取RefreshToken

第一种

需要通过浏览器获取refresh_token。这里以Chrome浏览器为例,其他浏览器类似。
打开 阿里云盘网页 并进行登录,然后F12按键打开浏览器调试菜单,按照下面步骤进行
image-1676096038655

第二种

打开 阿里云盘网页 并进行登录,然后F12按键打开浏览器调试菜单,按照下面步骤进行

JSON.parse(localStorage.getItem("token")).refresh_token

image-1676096052766

登录

aliyunpan login -RefreshToken=626a27b6193f4c5ca6ef0.......

编写上传脚本

cd ~
vim backup.sh

复制以下内容

#!/bin/bash
WEB_PATH=/www/wwwroot #网站根目录
# HALO_PATH=~/.halo # halo博客备份 可删除
# DOC_PATH=/showdoc_data # showdoc备份 可删除
ALIYUNPAN_PATH=/backup         #阿里网盘内的文件夹路径
MYSQL_USER="root"                #数据库用户
MYAQL_PASSWORD="26d6bxa3ad30x3x3abdd"       #数据库密码
MYSQL_HOST="localhost"           #数据库IP(本地)
MYSQL_PORT="3306"                #数据库端口
BACKUP_DIR=/wordpress/backup          #备份到哪个目录
DATE=`date +%Y%m%d%H%M`          #时间
# 以下是删除阿里备份数据(删除7天以前的备份数据)
MYSQL_ALI=$(find $BACKUP_DIR -mtime +7 -type f -name '*.sql'| grep -Eo "\bmysql_backup_[0-9]*\b.sql")
WEB_ALI=$(find $BACKUP_DIR -mtime +7 -type f -name '*.tar.gz' | grep -Eo "\bWEB_[0-9]*\b.tar.gz")
#需要检查一下云端是否有数据需要删除
if [ -n "$MYSQL_ALI" -o -n "$WEB_ALI" ];then
    echo "正在删除阿里网盘7天以前数据,数据为:$ALIYUNPAN_PATH中的$MYSQL_ALI和$WEB_ALI"
    aliyunpan rm $ALIYUNPAN_PATH/$MYSQL_ALI $ALIYUNPAN_PATH/$WEB_ALI
else
	echo "阿里网盘中没有可删除的文件!!!"
fi
# 删除本地备份数据(删除7天以前的备份数据)
echo "正在删除7天以前的本地备份数据!!!"
find $BACKUP_DIR -mtime +7 -type f -name '*.sql' -exec rm -rf {} \;
find $BACKUP_DIR -mtime +7 -type f -name '*.tar.gz' -exec rm -rf {} \;
# 备份全部数据库
mysqldump -h$MYSQL_HOST -u$MYSQL_USER -p$MYAQL_PASSWORD -P$MYSQL_PORT --all-databases >$BACKUP_DIR/mysql_backup_$DATE.sql
if [ $? -eq 0 ]; then
    echo "备份成功,时间:" $(date +"%Y-%m-%d %H:%M:%S")
    #备份多个目录
    #tar zcPf $BACKUP_DIR/WEB_${DATE}.tar.gz $WEB_PATH $HALO_PATH $DOC_PATH
    #备份单个目录
    tar zcPf $BACKUP_DIR/WEB_${DATE}.tar.gz $WEB_PATH
    if [ $? -eq 0 ]; then
        echo "备份网站根目录成功,路径:$BACKUP_DIR/WEB_${DATE}.tar.gz"
        if [ $? -eq 0 ]; then
        # 调用aliyunpan上传备份的文件
        aliyunpan upload $BACKUP_DIR/mysql_backup_$DATE.sql $BACKUP_DIR/WEB_${DATE}.tar.gz $ALIYUNPAN_PATH
        # 节省硬盘空间 可删除
        sudo rm -rf $BACKUP_DIR/*
        else
            echo "上传文件出错,请检查日志!!!"
        fi
    else
        echo "备份网站根目录出错,请检查日志!!!"
    fi
else
    echo "备份数据库出错,请检查日志!!!"
fi

设置权限

sudo chmod +x backup.sh
sudo chmod 755 backup.sh

增加定时任务

sudo vim /etc/crontab
#每天早上1点执行数据库和html备份脚本
0 1 * * * root ~/backup.sh > /opt/backup.log 2>&1 &

具体效果

image-1676096070005
image-1676096086039
image-1676096290181

结言

数据备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程。传统的数据备份主要是采用内置或外置的磁带机进行冷备份。但是这种方式只能防止操作失误等人为故障,而且其恢复时间也很长。随着技术的不断发展,数据的海量增加,不少的企业开始采用网络备份。网络备份一般通过专业的数据存储管理软件结合相应的硬件和存储设备来实现。

数据备份的必要性:对数据的威胁通常比较难于防范,这些威胁一旦变为现实,不仅会毁坏数据,也会毁坏访问数据的系统。造成数据丢失和毁坏的原因主要有如下几个方面:

1.数据处理和访问软件平台故障。

2.操作系统的设计漏洞或设计者出于不可告人的目的而人为预置的黑洞。

3.系统的硬件故障

4.人为的操作失误

5.网络内非法访问者的恶意破坏

6.网络供电系统故障等