Minio全量、增量备份和还原_minio 导出增量数据,2024年最新简直无敌

本文详述了如何使用Minio进行全量和增量备份,并提供了备份脚本,包括全量备份记录、检查、清理、增量备份定义以及数据还原步骤。此外,还提及了网络安全学习资源和面试题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

mkdir -p "$FULL\_BACKUP\_DIR"

fi

全量备份并记录耗时到日志文件中

(time rsync -av --delete “ S O U R C E _ D I R " " SOURCE\_DIR" " SOURCE_DIR""FULL_BACKUP_DIR”) >“${FULL_LOG_FILE}” 2>&1

检查全量备份是否成功

if [ $? -eq 0 ]; then
touch ${DATE_BACKUP_DIR}/full_backup_success_flag

    # 压缩其它全量备份文件
    echo "压缩其它全量备份文件..." >>"${FULL\_LOG\_FILE}"

    old\_backup\_file=$(find "$BACKUP\_DIR" -maxdepth 1 -type d -not -name "$DATE\_STR"|grep -v "$BACKUP\_DIR"'$')
    if [ -z "${old\_backup\_file}" ]; then
            echo "暂无旧备份文件" >>"${FULL\_LOG\_FILE}"
    else
            echo "待处理旧备份文件:" >>"${FULL\_LOG\_FILE}" 
            echo "$old\_backup\_file" | xargs -I {} echo {} >>"${FULL\_LOG\_FILE}" 
            echo "压缩旧备份文件..." >>"${FULL\_LOG\_FILE}" 
            echo "$old\_backup\_file" | xargs -r -I {} sh -c 'tar -czf {}.tar.gz -C {} -P .'
            echo "压缩成功!" >>"${FULL\_LOG\_FILE}" 

            echo "删除旧备份文件..." >>"${FULL\_LOG\_FILE}" 
            echo "$old\_backup\_file" | xargs -r -I {} rm -rf {}
            echo "删除成功!" >>"${FULL\_LOG\_FILE}" 
    fi

    echo "全量备份:${DATE\_BACKUP\_DIR},成功" >>"${FULL\_LOG\_FILE}"

else
echo “全量备份: D A T E _ B A C K U P _ D I R ,失败 " > > " {DATE\_BACKUP\_DIR},失败" >>" DATE_BACKUP_DIR,失败">>"{FULL_LOG_FILE}”
fi

清理过期备份

find " B A C K U P _ D I R " − c t i m e + BACKUP\_DIR" -ctime + BACKUP_DIR"ctime+RETENTION_PERIOD -exec rm -rf {} ;

set +x


**命令解析**



> 
> `(time rsync -av --delete "$SOURCE_DIR" "$FULL_BACKUP_DIR") >"${FULL_LOG_FILE}" 2>&1`
> 
> 
> 该命令用于使用`rsync`工具进行数据同步,并将同步过程中的输出信息(包括标准输出和错误输出)重定向到指定的日志文件中。命令详细解释如下:
> 
> 
> * `time`: 这是一个Unix/Linux命令,用于测量并显示命令执行所花费的时间。
> * `rsync`: 是一个强大的文件同步工具,用于在本地或远程之间进行数据备份或同步。
> * `av`: 这是rsync的选项组合,其中:
> 	+ `a`:归档模式,相当于 `rlptgoD` 的组合,保留源文件的所有属性(如权限、时间戳、软硬链接等)并递归处理目录。
> 	+ `v`:详细输出模式,会让rsync运行时显示详细的同步信息。
> * `-delete`:这是一个rsync选项,表示在目标目录中删除那些源目录不存在的文件和目录,使得目标目录与源目录保持一致。
> * `"$SOURCE_DIR"` 和 `"$FULL_BACKUP_DIR"`:分别为源目录和目标目录,它们是变量引用,实际执行时会替换为具体的路径。
> * `> "${FULL_LOG_FILE}"`: 将命令的标准输出重定向到`${FULL_LOG_FILE}`这个文件中,即同步过程中的详细信息会被记录在这个日志文件里。
> * `2>&1`:这是将标准错误输出重定向到标准输出的语法,也就是说,任何错误信息也会被写入到`${FULL_LOG_FILE}`这个日志文件中。
> 
> 
> 综上所述,此命令的作用是:通过rsync工具以归档模式递归地同步源目录至目标目录,同时删除目标目录中源目录没有的文件,并将整个同步过程(包括详细信息和错误信息)都记录到指定的日志文件中,并且还显示了整个操作的执行时间。
> 
> 
> 


### 增量备份脚本


该脚本会基于最新的全量备份创建增量备份


`vim backup_incremental.sh`



#!/bin/bash

增量备份脚本

set -e
set -x
#获取当前脚本所在路径
CUR_PATH=$(cd dirname $0; pwd)

导入配置文件中的公共变量

source ${CUR_PATH}/backup_env.sh

获取全量备份的最新目录

LATEST_BACKUP= ( f i n d " (find " (find"{BACKUP_DIR}" -type f -name “full_backup_success_flag” -exec dirname {} ;| grep -v '_restore_temp ′ ∣ x a r g s l s − t d ∣ h e a d − n 1 ) L A T E S T _ F U L L _ B A C K U P = " ' | xargs ls -td | head -n 1) LATEST\_FULL\_BACKUP=" xargslstdheadn1)LATEST_FULL_BACKUP="{LATEST_BACKUP}/full"
INCREMENTAL_LOG_FILE=“${LATEST_BACKUP}/incremental.log”

定义增量备份目录

DATE_STR=“ ( d a t e ′ + I N C R E M E N T A L _ B A C K U P _ D I R = " (date '+%Y-%m-%d\_%H-%M-%S')" INCREMENTAL\_BACKUP\_DIR=" (date+INCREMENTAL_BACKUP_DIR="{LATEST_BACKUP}/incremental/${DATE_STR}”

检查全量备份是否存在

if [ -f “KaTeX parse error: Expected 'EOF', got '#' at position 63: …; then #̲ 创建增量备份目录 …INCREMENTAL_BACKUP_DIR” ]; then
mkdir -p “${INCREMENTAL_BACKUP_DIR}”
fi

    echo "开始增量备份:${INCREMENTAL\_BACKUP\_DIR}" >>"${INCREMENTAL\_LOG\_FILE}"
    # 增量备份并记录耗时到日志文件中
    (time rsync -av --delete --link-dest="$LATEST\_FULL\_BACKUP" "$SOURCE\_DIR" "$INCREMENTAL\_BACKUP\_DIR")  >>"${INCREMENTAL\_LOG\_FILE}" 2>&1

    # 检查增量备份是否成功
    if [ $? -eq 0 ]; then
            echo "增量备份:${INCREMENTAL\_BACKUP\_DIR},成功" >>"${INCREMENTAL\_LOG\_FILE}"

            # 只保留最新的10个增量备份
            #find "${LATEST\_BACKUP}/incremental" -maxdepth 1 -type d -exec stat -c "%Y %n" {} \; | sort -n | grep -vE "\\${LATEST\_BACKUP}/incremental\$" | head -n -1 | awk '{print $2}'| xargs rm -rf
            prepare\_delete\_file=$(find "${LATEST\_BACKUP}/incremental" -maxdepth 1 -type d -exec stat -c "%Y %n" {} \; | sort -n | grep -v "${LATEST\_BACKUP}"'/incremental$' | head -n -$INCREMENTAL\_RETENTION\_COUNT | awk '{print $2}')

            if [ -z "${prepare\_delete\_file}" ]; then
                    echo "暂无要删除的备份文件" >>"${INCREMENTAL\_LOG\_FILE}"
            else
                    echo "待删除备份文件:" >>"${INCREMENTAL\_LOG\_FILE}" 
                    echo "$prepare\_delete\_file" | xargs -I {} echo {} >>"${INCREMENTAL\_LOG\_FILE}" 
                    echo "$prepare\_delete\_file" | xargs -r -I {} rm -rf {}
                    echo "删除成功!" >>"${INCREMENTAL\_LOG\_FILE}" 
            fi
    else
            echo "增量备份:${INCREMENTAL\_BACKUP\_DIR},失败" >>"${INCREMENTAL\_LOG\_FILE}"
    fi

else
echo “未找到最新有效的全量备份”
exit 1
fi

echo -e “\n\n\n\n” >>“${INCREMENTAL_LOG_FILE}”
#set +x


**命令解析**



> 
> `(time rsync -av --delete --link-dest="$LATEST_FULL_BACKUP" "$SOURCE_DIR" "$INCREMENTAL_BACKUP_DIR") >>"${INCREMENTAL_LOG_FILE}" 2>&1`  
>  该命令执行的是基于`$LATEST_FULL_BACKUP`的增量备份操作,将`$SOURCE_DIR`与上次全量备份差异部分同步至`$INCREMENTAL_BACKUP_DIR`,并且将本次增量备份的详细操作信息及可能遇到的错误信息一并追加记录到`${INCREMENTAL_LOG_FILE}`日志文件中,同时显示操作耗时。
> 
> 
> `-link-dest="$LATEST_FULL_BACKUP"`: 这个参数是rsync进行增量备份的关键选项,它指定了一个最近的完整备份目录。当rsync发现当前要备份的文件与`$LATEST_FULL_BACKUP`目录下的文件相同时,不会重新复制文件,而是创建一个指向已有文件的硬链接,这样可以节省存储空间并提高备份速度。
> 
> 
> 


### 数据还原脚本


用户可以选择还原特定日期的备份,并选择是否还原增量备份数据


`vim backup_restore.sh`



#!/bin/bash

Minio 数据还原脚本

#set -e
#set -x
#获取当前脚本所在路径
CUR_PATH=$(cd dirname $0; pwd)

导入配置文件中的公共变量

source ${CUR_PATH}/backup_env.sh

echo “################################################## Minio数据还原 ##################################################”

列出可供还原备份数据

echo “可供还原的备份数据:”
AVAILABLE_BACKUPS= ( l s − 1 − d " (ls -1 -d " (ls1d"BACKUP_DIR"/*| grep -v '_restore_temp ′ ∣ x a r g s − I b a s e n a m e ) i f [ − z " ' | xargs -I {} basename {}) if [ -z " xargsIbasename)if[z"AVAILABLE_BACKUPS" ]; then
echo “暂无备份数据。”
exit 1
fi

列出备份数据并允许用户选择

select BACKUP_FILE in A V A I L A B L E _ B A C K U P S d o i f [ − n " AVAILABLE\_BACKUPS do if [ -n " AVAILABLE_BACKUPSdoif[n"BACKUP_FILE" ]; then
echo “您选择了备份文件:$BACKUP_FILE”
break
else
echo “无效的选择。请重新选择。”
fi
done

SELECTED_BACKUP_FILE=“ B A C K U P _ D I R / BACKUP\_DIR/ BACKUP_DIR/{BACKUP_FILE}”

解压备份文件(如果是压缩文件)或复制文件夹

if [[ “$SELECTED_BACKUP_FILE” == *.tar.gz ]]; then

创建还原临时文件夹

RESTORE_TEMP_FOLDER=“ S E L E C T E D _ B A C K U P _ F I L E _ r e s t o r e _ t e m p " i f [ ! − d " {SELECTED\_BACKUP\_FILE}\_restore\_temp" if [ ! -d " SELECTED_BACKUP_FILE_restore_temp"if[!d"RESTORE_TEMP_FOLDER” ]; then
rm -rf R E S T O R E _ T E M P _ F O L D E R m k d i r − p " {RESTORE\_TEMP\_FOLDER} mkdir -p " RESTORE_TEMP_FOLDERmkdirp"{RESTORE_TEMP_FOLDER}"
fi
tar -xzvf “ S E L E C T E D _ B A C K U P _ F I L E " − C " SELECTED\_BACKUP\_FILE" -C " SELECTED_BACKUP_FILE"C"RESTORE_TEMP_FOLDER”
SELECTED_BACKUP_FILE=$RESTORE_TEMP_FOLDER
fi

找到全量备份数据,根据指定日期进行数据还原

FULL_BACKUP_DIR=" B A C K U P _ D I R / BACKUP\_DIR/ BACKUP_DIR/(basename “ S E L E C T E D _ B A C K U P _ F I L E " ) / f u l l / d a t a " i f [ ! − d " SELECTED\_BACKUP\_FILE")/full/data" if [ ! -d " SELECTED_BACKUP_FILE")/full/data"if[!d"FULL_BACKUP_DIR” ]; then
echo “未找到全量备份数据。无法进行还原。”
exit 1
fi
echo “找到全量备份数据:$FULL_BACKUP_DIR”

创建恢复时原始数据备份目录

db_data_backup_dir= M I N I O _ H O M E / b a k d a t a / {MINIO\_HOME}/bak_data/ MINIO_HOME/bakdata/(date ‘+%Y-%m-%d_%H-%M-%S’)
if [ ! -d “ d b _ d a t a _ b a c k u p _ d i r " ] ; t h e n m k d i r − p " db\_data\_backup\_dir" ]; then mkdir -p " db_data_backup_dir"];thenmkdirp"{db_data_backup_dir}”
fi

#备份原始数据
echo “备份原始数据…”
mv ${SOURCE_DIR} ${db_data_backup_dir}
echo “备份原始数据完成”

用户选择需要还原增量数据

AVAILABLE_INCREMENTAL_BASE_BACKUPS=" B A C K U P _ D I R / BACKUP\_DIR/ BACKUP_DIR/(basename " S E L E C T E D _ B A C K U P _ F I L E " ) / i n c r e m e n t a l " A V A I L A B L E _ I N C R E M E N T A L _ B A C K U P S = SELECTED\_BACKUP\_FILE")/incremental" AVAILABLE\_INCREMENTAL\_BACKUPS= SELECTED_BACKUP_FILE")/incremental"AVAILABLE_INCREMENTAL_BACKUPS=(ls -1 -d “KaTeX parse error: Undefined control sequence: \* at position 40: …BASE\_BACKUPS"/\̲*̲ | xargs -I {} …AVAILABLE_INCREMENTAL_BACKUPS” ]; then
echo “暂无增量备份数据。”
exit 1
fi
echo “请选择增量备份数据:”

列出增量备份数据并允许用户选择

select INCREMENTAL_BACKUP_FILE in A V A I L A B L E _ I N C R E M E N T A L _ B A C K U P S d o i f [ − n " AVAILABLE\_INCREMENTAL\_BACKUPS do if [ -n " AVAILABLE_INCREMENTAL_BACKUPSdoif[n"INCREMENTAL_BACKUP_FILE" ]; then
echo “您选择了增量备份文件:$INCREMENTAL_BACKUP_FILE”
break
else
echo “无效的选择。请重新选择。”
fi
done

根据用户选择的增量备份,进行数据还原

SELECTED_INCREMENTAL_BACKUP_FILE=“ A V A I L A B L E _ I N C R E M E N T A L _ B A S E _ B A C K U P S / AVAILABLE\_INCREMENTAL\_BASE\_BACKUPS/ AVAILABLE_INCREMENTAL_BASE_BACKUPS/INCREMENTAL_BACKUP_FILE”

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

50764](https://i-blog.csdnimg.cn/blog_migrate/b84394276be4f7fcf4d176fa628748ac.png)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-g4ELclsg-1713378867965)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值