如何自动备份MongoDB?

Bash

1 前言

最近需要备份MongoDB,于是定制适用于自己环境的脚本。

2 最佳实践

2.1 环境部署

MongoDB yum部署,

如何部署MongoDB数据库(YUM)?


MongoDB二进制部署,

如何部署MongoDB数据库(二进制)?


MongoDB Docker 部署,

如何部署Docker MongoDB?

2.2 部署备份脚本

2.2.1 创建备份脚本

mkdir -p ~/scripts/
vim ~/scripts/backupMongodb.sh

可加入如下配置,

#!/bin/bash

backupStorageDIR="/backup/mongodb"
dumpName="mongodb-"`date +'%Y%m%d%H%M%S'`
logFile="/var/log/mongodbBackup.log"
logDataTime=`date +"%Y-%m-%d %H:%M:%S"`
dailyBakKeeptime='+30'
weeklyBakKeeptime='+365'

Today="`date +%a`"
dailyBakDIR=$backupStorageDIR"/dailyBackup"
weeklyBakDIR=$backupStorageDIR"/weeklyBackup"

cd $backupStorageDIR
if [ $? != 0 ]; then
        echo $logDataTime" Directory mount error!" | tee -a $logFile
        exit 1
fi

case $Today in
Mon|Tue|Wed|Thu|Fri|Sat)
        mkdir -p $dailyBakDIR"/"$dumpName

        if [ ! -d $dailyBakDIR"/"$dumpName ]; then
                echo $logDataTime" dumpName not found!" | tee -a $logFile
                exit 1
        fi

        mongodump -o $dailyBakDIR"/"$dumpName
        sleep 10
        cd $dailyBakDIR
        tar --remove-files -cvjf $dumpName".tar.bz2" $dumpName

        #find $dailyBakDIR -type f -name mongodb-\*.tar.bz2 -ctime $dailyBakKeeptime -exec ls {} \;
        find $dailyBakDIR -type f -name mongodb-\*.tar.bz2 -ctime $dailyBakKeeptime -exec rm -f {} \;
;;
Sun)
        mkdir -p $weeklyBakDIR"/"$dumpName

        if [ ! -d $weeklyBakDIR"/"$dumpName ]; then
                echo $logDataTime" dumpName not found!" | tee -a $logFile
                exit 1
        fi

        mongodump -o $weeklyBakDIR"/"$dumpName
        sleep 10
        cd $weeklyBakDIR
        tar --remove-files -cvjf $dumpName".tar.bz2" $dumpName

        #find $weeklyBakDIR -type f -name mongodb-\*.tar.bz2 -ctime $weeklyBakKeeptime -exec ls {} \;
        find $weeklyBakDIR -type f -name mongodb-\*.tar.bz2 -ctime $weeklyBakKeeptime -exec rm -f {} \;
;;
esac

– 变量“backupStorageDIR”定义备份存储的目录,本例为”/backup/mongodb”
– 变量“logFile”定义备份日志的路径,本例为”/var/log/mongodbBackup.log”
– 变量“dailyBakKeeptime”定义日备份保留的时间,本例为’+30’,即保留30天
– 变量“weeklyBakKeeptime”定义周备份保留的时间,本例为’+365’,即保留365天
– 变量“dumpName”定义mongodb的备份文件夹名称,本例为”mongodb-“`date +’%Y%m%d%H%M%S’`
– 变量“logDataTime”定义日志的时间格式,本例为`date +”%Y-%m-%d %H:%M:%S”`

2.2.2 配置脚本触发

crontab -e

加入如下配置,

0 2 * * * bash ~/scripts/backupMongodb.sh

参阅文档
==============
https://docs.mongodb.com/manual/reference/program/mongodump/

没有评论

发表回复

Bash
如何熟悉Base Shell的变量的间接引用?

1 前言 一个问题,一篇文章,一出故事。 笔者希望以一个变量名称去引用另一个变量,于是整理此文。 2 …

Bash
如何实现文件夹路径转纯数字符串?

1 前言 一个问题,一篇文章,一出故事。 由于由于需要设置某目录的配额,配额要求为每个目录指定一个项 …

Bash
如何统计Linux打开文件前10进程?

1 前言 一个问题,一篇文章,一出故事。 笔者生产环境有台服务最近压力比较大,打开的文件数量不断地往 …