Mongodb 数据库恢复脚本

#!/bin/bash
##################################################################################################################
##   Create_time     : 2023/6/30                                                                                ##
##   Author          : Ops-DaBao                                                                                ##
##   Mail            :                                                                    ##
##   Feature         : restore mongodb Data                                                                     ##
##   Usage           : When executing the script, you can pass parameters.                                      ##
##                     If you do not pass parameters, the default is used                                       ##
##################################################################################################################
# shellcheck disable=SC2034
red_color="\033[31m"
green_color="\033[32m"
text_end="\033[0m"
start_time=$(date +%s)
backup_file=""
username=""
password=""
database_name=""
collection_name=""
tip=""


usage() {
  echo "脚本使用方法:    bash $0 <选项> <参数>"
  echo "选项说明:"
  echo " -f <文件路径>:  数据保存路径,绝对路径 (默认为空)"
  echo " -u <用户名>:   指定用户名 (默认为空)"
  echo " -p <密码>:     指定密码 (默认为空)"
  echo " -d <数据库名>:  指定数据库名 (默认为空)"
  echo " -c <数据集合>:  指定数据库集合名 (默认为空)"
  echo " -t <恢复种类>:  指定恢复 数据 assemble(集合) 或 singlelibrary(数据库)  或 fulllibrary(全库) (默认为空)"
  exit 1
}

restore_single_table_data() {
	# 还原单个集合的数据
	echo -e "${red_color}-----------本次进行单集合数据恢复-----------${text_end}"
	docker exec mongodb /bin/bash -c "mongorestore -u $username -p$password --authenticationDatabase admin --archive  --db $database_name --collection  $collection_name" < $backup_file
	echo -e "${green_color}-----------恢复完毕!-----------${text_end}"
	echo -e "${green_color}-----本次是使用${backup_file}进行数据恢复-----------${text_end}"
}

restore_the_entire_library_data() {
	# 还原单个数据库的数据
	echo -e "${red_color}-----------本次进行单库据恢复-----------${text_end}"
	docker exec mongodb /bin/bash -c "mongorestore -u $username -p$password --authenticationDatabase admin --archive  --db $database_name" < $backup_file
	echo -e "${green_color}-----------恢复完毕!-----------${text_end}"
	echo -e "${green_color}-----本次是使用${backup_file}进行数据恢复-----------${text_end}"
}


Restore_a_database_in_full() {
	# 从全量数据中,还原一个数据库
	echo -e "${red_color}----------本次进行全量中单库据恢复-----------${text_end}"
	docker exec MySQL8 /bin/bash -c "mongorestore -u $username -p$password  --authenticationDatabase admin --archive  --db $database_name" < $backup_file
	echo -e "${green_color}----------恢复完毕!-----------${text_end}"
	echo -e "${green_color}-----本次是使用${backup_file}进行数据恢复-----------${text_end}"
}


# 检查是否有参数传递,如果有则覆盖默认值
while getopts ":f:u:p:d:c:t:*:" opt; do
  case $opt in
    f) backup_file="$OPTARG";;
    u) username="$OPTARG";;
    p) password="$OPTARG";;
    d) database_name="$OPTARG";;
    c) collection_name="$OPTARG";;
    t) tip="$OPTARG";;
    *) echo "参数传入有误: -$OPTARG"; usage;;
  esac
done

# 检查备份文件是否存在
if [ ! -f "$backup_file" ]; then
  echo "Backup file not found: $backup_file"
  exit 1
fi


case $tip in
    assemble)
      echo -e "${green_color}Mongo database_name: ${database_name}${text_end}"
      echo -e "${green_color}Mongo database_name: ${collection_name}${text_end}"
      restore_single_table_data;
      ;;
    singlelibrary)
      echo -e "${green_color}Mongo database_name: ${database_name}${text_end}"
      Restore_a_database_in_full;
      ;;
    fulllibrary)
      echo -e "${green_color}Mongo database_name: ${database_name}${text_end}"
      Restore_a_database_in_full;
      ;;
    *)
      echo -e "${red_color}暂时无法确认你要恢复那些数据${text_end}"
esac


end_time=$(date +%s)
execution_time=$((end_time - start_time))

echo -e "${green_color}本次执行脚本耗时为:$execution_time 秒${text_end}"

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

客官,吃辣条吗?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值