使用shell脚本定期备份和恢复MongoDB

本文介绍了如何使用Docker和mongodump/mongorestore工具在MongoDB中自动化数据库备份和恢复过程,包括创建Docker镜像、编写脚本和设置cron任务进行定期操作。

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

12ae7305437900c140a6a41630ed2b44.png

在MongoDB中,mongodump是一个非常实用的工具,用于创建数据库的备份。这个工具可以将数据库的内容导出到一个JSON文件中。然后我们可以使用mongorestore将这个备份文件导入到另一个数据库中。如果我们结合Docker和循环使用,就可以自动化这个过程,并记录每个步骤的结果。

93c4c85e33b5432becf572d4c2a6f3a9.png

我们创建一个Docker镜像,镜像内包含mongodump工具。Dockerfile内容如下。

FROM ubuntu:latest  
COPY mongo_script.sh /mongo_script.sh  
CMD ["/bin/bash", "/mongo_script.sh"]

可以使用以下命令构建和运行这个镜像

docker build -t mongo-tool .  
docker run -d mongo-tool

接下来,我们需要编写一个脚本来进行备份和导入操作。我们可以使用一个循环来依次备份数据库中的每个集合。以下是一个例子:

#!/bin/bash  


# 定义变量  
HOST="192.168.1.15:27017"  
DATABASE="DB12"  
EXPORT_DIR="/mongobak/temp"  
COLLECTION="WATER_DATA_2023"  
FILE_EXTENSION=".json"  
LOG_FILE="/path/to/log_file.log"  
  
# 检查并创建导出目录(如果需要)  
if [ ! -d "$EXPORT_DIR" ]; then  
    mkdir -p $EXPORT_DIR  
fi  
  
# 循环导出每个集合  
for collection in $(mongo --host $HOST --db $DATABASE --quiet --shell --eval "db.getCollectionNames()" | tr -d '["]'); do  
  echo "Exporting collection $collection" >> $LOG_FILE  
  mongodump --host $HOST --db $DATABASE --collection $collection --out $EXPORT_DIR >> $LOG_FILE 2>&1  
done

98bec7e718327cf13bddbdb429fd6558.png

对应的,我们导出数据之后,有时候还会需要导入。下面是一个对应mongorestore的shell脚本

#!/bin/bash  


# 定义变量  
HOST="192.168.1.15:27017"  
DATABASE="DB12"  
EXPORT_DIR="/mongobak/temp"  
COLLECTION="WATER_DATA_2023"  
FILE_EXTENSION=".json"  
  
# 循环导入文件  
for file in $EXPORT_DIR/$COLLECTION$FILE_EXTENSION  
do  
  ./mongorestore --host $HOST --db $DATABASE --collection $COLLECTION --file $file  
done

然后可以通过创建cron任务每天定时执行脚本。可以在终端中运行 crontab -e 命令打开cron配置文件,并在文件中添加以下行:

0 0 * * * /path/to/your_script.sh > /dev/null 2>&1

以上就是我们使用mongodump和mongorestore进行自动化备份和导入的基本流程,实际使用的过程中,也可以根据实际应用来调整对应的逻辑控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值